Files
backend/src/special-orders/dto/create-special-order.dto.ts
T

107 lines
2.3 KiB
TypeScript

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 {}