diff --git a/api-v3/src/asset-master/dto/create-inventory-structure.dto.ts b/api-v3/src/asset-master/dto/create-inventory-structure.dto.ts new file mode 100644 index 0000000..5d400e3 --- /dev/null +++ b/api-v3/src/asset-master/dto/create-inventory-structure.dto.ts @@ -0,0 +1,56 @@ +import { Transform } from 'class-transformer'; +import { + IsIn, + IsOptional, + IsString, + IsUUID, + Matches, + MaxLength, + MinLength, +} from 'class-validator'; + +export const INVENTORY_STRUCTURE_KINDS = [ + 'AREA', + 'YACIMIENTO', + 'INSTALACION', + 'SUBINSTALACION', +] as const; +export type InventoryStructureKind = typeof INVENTORY_STRUCTURE_KINDS[number]; + +export class CreateInventoryStructureDto { + @IsIn(INVENTORY_STRUCTURE_KINDS) + kind!: InventoryStructureKind; + + @IsOptional() + @Transform(({ value }) => typeof value === 'string' && value.trim() ? value.trim().toUpperCase() : null) + @IsString() + @MaxLength(120) + @Matches(/^[A-Z0-9][A-Z0-9._/-]*$/) + code?: string | null; + + @Transform(({ value }) => typeof value === 'string' ? value.trim() : value) + @IsString() + @MinLength(1) + @MaxLength(200) + name!: string; + + @IsOptional() + @Transform(({ value }) => typeof value === 'string' && value.trim() ? value.trim() : null) + @IsString() + @MaxLength(200) + commonName?: string | null; + + @IsOptional() + @IsUUID('4') + parentId?: string | null; + + @IsOptional() + @IsUUID('4') + familyId?: string | null; + + @IsOptional() + @Transform(({ value }) => typeof value === 'string' && value.trim() ? value.trim() : null) + @IsString() + @MaxLength(4000) + description?: string | null; +}