import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; import { Max, Min, ArrayMaxSize, ArrayUnique, IsArray, IsDateString, IsIn, IsInt, IsNumber, IsOptional, IsPositive, IsString, } from 'class-validator'; export const BOTTLING_ACKNOWLEDGEABLE_WARNINGS = [ 'WATER_CONTENT_ABOVE_LEGAL', ] as const; export type AcknowledgeableWarning = (typeof BOTTLING_ACKNOWLEDGEABLE_WARNINGS)[number]; export class CreateBottlingBatchDto { @ApiProperty() @IsString() honeyBatchId!: string; @ApiPropertyOptional() @IsOptional() @IsString() productId?: string; @ApiProperty() @IsDateString({ strict: true }) date!: string; @ApiPropertyOptional({ description: 'Glasgröße in Gramm. Fehlt sie, gilt die Packungsgröße des Artikels.', }) @IsOptional() @IsNumber() @IsPositive() jarSize?: number; @ApiProperty() @IsInt() @IsPositive() jarCount!: number; @ApiPropertyOptional({ description: 'MHD. Fehlt es, gilt Abfülldatum plus Haltbarkeit des Artikels (Monatsende abgeschnitten).', }) @IsOptional() @IsDateString({ strict: true }) bestBeforeDate?: string; @ApiPropertyOptional({ description: 'Wird automatisch generiert, falls die Automatisierung "Los-/Chargennummer-Format" aktiv ist', }) @IsOptional() @IsString() lotNumber?: string; @ApiPropertyOptional({ enum: BOTTLING_ACKNOWLEDGEABLE_WARNINGS, isArray: true, description: 'Bestätigte Warnungen. Über der gesetzlichen Wassergehaltsgrenze nötig, sonst 409 CONFIRMATION_REQUIRED.', }) @IsOptional() @IsArray() @ArrayMaxSize(1) @ArrayUnique() @IsIn(BOTTLING_ACKNOWLEDGEABLE_WARNINGS, { each: true }) acknowledgedWarnings?: AcknowledgeableWarning[]; @ApiPropertyOptional({ description: 'Der Wassergehalt (%), den die Bestätigung meint: der Wert aus der 409-Antwort. Weicht der geprüfte Wert ab, folgt eine neue 409.', }) @IsOptional() @IsNumber() @Min(0) @Max(100) acknowledgedWaterContent?: number; }