import { IsString, IsNumber, IsBoolean, IsOptional, IsEnum, IsDateString, IsArray, IsUUID, Min, Max, Length, } from 'class-validator'; import { PromotionType } from '../entities/promotion.entity'; export class CreatePromotionDto { @IsString() @Length(2, 100) name: string; @IsString() @Length(2, 50) code: string; @IsOptional() @IsString() description?: string; @IsEnum(PromotionType) type: PromotionType; @IsNumber() @Min(0) value: number; @IsOptional() @IsNumber() @Min(0) minPurchaseAmount?: number; @IsOptional() @IsNumber() @Min(0) maxDiscount?: number; @IsOptional() @IsNumber() @Min(1) usageLimit?: number; @IsOptional() @IsNumber() @Min(1) perUserLimit?: number; @IsDateString() startsAt: string; @IsDateString() endsAt: string; @IsOptional() @IsBoolean() isActive?: boolean; @IsOptional() @IsArray() @IsUUID('4', { each: true }) applicablePackageIds?: string[]; } export class UpdatePromotionDto { @IsOptional() @IsString() @Length(2, 100) name?: string; @IsOptional() @IsString() description?: string; @IsOptional() @IsNumber() @Min(0) value?: number; @IsOptional() @IsNumber() @Min(0) minPurchaseAmount?: number; @IsOptional() @IsNumber() @Min(0) maxDiscount?: number; @IsOptional() @IsNumber() @Min(1) usageLimit?: number; @IsOptional() @IsNumber() @Min(1) perUserLimit?: number; @IsOptional() @IsDateString() startsAt?: string; @IsOptional() @IsDateString() endsAt?: string; @IsOptional() @IsBoolean() isActive?: boolean; @IsOptional() @IsArray() @IsUUID('4', { each: true }) applicablePackageIds?: string[]; } export class ValidatePromoCodeDto { @IsString() code: string; @IsOptional() @IsUUID() packageId?: string; @IsOptional() @IsNumber() @Min(0) purchaseAmount?: number; }