miinventario-backend-v2/src/modules/admin/dto/promotion.dto.ts
rckrdmrd 5a1c966ed2 Migración desde miinventario/backend - Estándar multi-repo v2
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 08:12:15 -06:00

138 lines
1.9 KiB
TypeScript

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