- Backend NestJS con módulos de autenticación, inventario, créditos - Frontend React con dashboard y componentes UI - Base de datos PostgreSQL con migraciones - Tests E2E configurados - Configuración de Docker y deployment Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
81 lines
1.1 KiB
TypeScript
81 lines
1.1 KiB
TypeScript
import { IsString, IsNumber, IsBoolean, IsOptional, Min, Max, Length } from 'class-validator';
|
|
|
|
export class CreatePackageDto {
|
|
@IsString()
|
|
@Length(2, 100)
|
|
name: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@Length(0, 500)
|
|
description?: string;
|
|
|
|
@IsNumber()
|
|
@Min(1)
|
|
credits: number;
|
|
|
|
@IsNumber()
|
|
@Min(0)
|
|
priceMxn: number;
|
|
|
|
@IsOptional()
|
|
@IsNumber()
|
|
@Min(0)
|
|
priceUsd?: number;
|
|
|
|
@IsOptional()
|
|
@IsBoolean()
|
|
isPopular?: boolean;
|
|
|
|
@IsOptional()
|
|
@IsNumber()
|
|
@Min(0)
|
|
@Max(100)
|
|
discountPercentage?: number;
|
|
|
|
@IsOptional()
|
|
@IsBoolean()
|
|
isActive?: boolean;
|
|
}
|
|
|
|
export class UpdatePackageDto {
|
|
@IsOptional()
|
|
@IsString()
|
|
@Length(2, 100)
|
|
name?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@Length(0, 500)
|
|
description?: string;
|
|
|
|
@IsOptional()
|
|
@IsNumber()
|
|
@Min(1)
|
|
credits?: number;
|
|
|
|
@IsOptional()
|
|
@IsNumber()
|
|
@Min(0)
|
|
priceMxn?: number;
|
|
|
|
@IsOptional()
|
|
@IsNumber()
|
|
@Min(0)
|
|
priceUsd?: number;
|
|
|
|
@IsOptional()
|
|
@IsBoolean()
|
|
isPopular?: boolean;
|
|
|
|
@IsOptional()
|
|
@IsNumber()
|
|
@Min(0)
|
|
@Max(100)
|
|
discountPercentage?: number;
|
|
|
|
@IsOptional()
|
|
@IsBoolean()
|
|
isActive?: boolean;
|
|
}
|