import { IsArray, IsBoolean, IsEnum, IsInt, IsISO8601, IsOptional, IsString, Max, Min, MinLength, ValidateIf, ValidateNested, } from 'class-validator'; import { Type } from 'class-transformer'; import { DeliveryType, SpecialOrderCategory } from '@prisma/client'; export class SpecialOrderImageDto { @IsString() @MinLength(1) url!: string; @IsString() @MinLength(1) storageKey!: string; } class SpecialOrderDetailsDto { @IsEnum(SpecialOrderCategory, { message: 'دسته‌بندی نامعتبر است' }) category!: SpecialOrderCategory; @IsString() @MinLength(1, { message: 'مناسبت سفارش الزامی است' }) name!: string; @IsOptional() @IsString() description?: string; @IsOptional() @IsISO8601({}, { message: 'تاریخ موردنیاز نامعتبر است' }) neededDate?: string; @IsOptional() @IsString() receiveTime?: string; @IsOptional() @Type(() => Number) @IsInt({ message: 'تعداد نفرات باید عدد باشد' }) @Min(1, { message: 'تعداد نفرات حداقل ۱ است' }) @Max(500, { message: 'تعداد نفرات بیش از حد مجاز است' }) servings?: number; @IsOptional() @IsString() cakeFlavor?: string; @IsOptional() @IsString() filling?: string; @IsOptional() @Type(() => Boolean) @IsBoolean() baloutSuggestedCombo?: boolean; @IsOptional() @IsString() coating?: string; @IsOptional() @IsString() designStyle?: string; @IsOptional() @IsString() cakeText?: string; @IsOptional() @IsString() decorations?: string; @IsOptional() @IsEnum(DeliveryType, { message: 'نوع دریافت نامعتبر است' }) deliveryType?: DeliveryType; @ValidateIf((dto: SpecialOrderDetailsDto) => dto.deliveryType === DeliveryType.pickup) @IsString({ message: 'انتخاب شعبه الزامی است' }) @MinLength(1, { message: 'انتخاب شعبه الزامی است' }) branchId?: string; @IsOptional() @IsArray() @ValidateNested({ each: true }) @Type(() => SpecialOrderImageDto) images?: SpecialOrderImageDto[]; } export class CreateSpecialOrderDto extends SpecialOrderDetailsDto { @IsString() @MinLength(1) userId!: string; } export class CreateMySpecialOrderDto extends SpecialOrderDetailsDto {}