import { Transform } from 'class-transformer'; import { IsBoolean, IsISO8601, IsInt, IsOptional, IsString, IsUUID, Max, MaxLength, Min, MinLength, } from 'class-validator'; export class CreateInventoryFunctionDto { @Transform(({ value }) => typeof value === 'string' ? value.trim().toUpperCase().replace(/[^A-Z0-9]+/g, '_').replace(/^_+|_+$/g, '') : value) @IsString() @MinLength(2) @MaxLength(120) code!: string; @Transform(({ value }) => typeof value === 'string' ? value.trim() : value) @IsString() @MinLength(2) @MaxLength(240) name!: string; @IsOptional() @Transform(({ value }) => typeof value === 'string' && value.trim() ? value.trim() : null) @IsString() @MaxLength(4000) description?: string | null; @IsOptional() @IsInt() @Min(0) @Max(100000) sortOrder?: number; } export class UpdateInventoryFunctionDto { @IsOptional() @Transform(({ value }) => typeof value === 'string' ? value.trim() : value) @IsString() @MinLength(2) @MaxLength(240) name?: string; @IsOptional() @Transform(({ value }) => typeof value === 'string' && value.trim() ? value.trim() : null) @IsString() @MaxLength(4000) description?: string | null; @IsOptional() @IsBoolean() isActive?: boolean; @IsOptional() @IsInt() @Min(0) @Max(100000) sortOrder?: number; } export class ChangeInventoryFunctionDto { @IsUUID('4') functionId!: string; @IsOptional() @IsISO8601({ strict: true }) effectiveAt?: string; @IsOptional() @Transform(({ value }) => typeof value === 'string' && value.trim() ? value.trim() : null) @IsString() @MaxLength(4000) reason?: string | null; }