Expand special orders with form details, codes, and SMS copy.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-10-12 23:44:27 +03:30
co-authored by Cursor
parent 63253f1877
commit 3cc4c89828
7 changed files with 423 additions and 79 deletions
@@ -1,6 +1,19 @@
import { IsArray, IsEnum, IsOptional, IsString, MinLength, ValidateNested } from 'class-validator';
import {
IsArray,
IsBoolean,
IsEnum,
IsInt,
IsISO8601,
IsOptional,
IsString,
Max,
Min,
MinLength,
ValidateIf,
ValidateNested,
} from 'class-validator';
import { Type } from 'class-transformer';
import { SpecialOrderCategory } from '@prisma/client';
import { DeliveryType, SpecialOrderCategory } from '@prisma/client';
export class SpecialOrderImageDto {
@IsString()
@@ -12,44 +25,82 @@ export class SpecialOrderImageDto {
storageKey!: string;
}
export class CreateSpecialOrderDto {
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;
@IsEnum(SpecialOrderCategory, { message: 'دسته‌بندی نامعتبر است' })
category!: SpecialOrderCategory;
@IsString()
@MinLength(1, { message: 'نام الزامی است' })
name!: string;
@IsOptional()
@IsString()
description?: string;
@IsOptional()
@IsArray()
@ValidateNested({ each: true })
@Type(() => SpecialOrderImageDto)
images?: SpecialOrderImageDto[];
}
export class CreateMySpecialOrderDto {
@IsEnum(SpecialOrderCategory, { message: 'دسته‌بندی نامعتبر است' })
category!: SpecialOrderCategory;
@IsString()
@MinLength(1, { message: 'نام الزامی است' })
name!: string;
@IsOptional()
@IsString()
description?: string;
@IsOptional()
@IsArray()
@ValidateNested({ each: true })
@Type(() => SpecialOrderImageDto)
images?: SpecialOrderImageDto[];
}
export class CreateMySpecialOrderDto extends SpecialOrderDetailsDto {}