import { Transform } from 'class-transformer'; import { IsBoolean, IsEmpty, IsEnum, IsOptional, IsString, IsUUID, MaxLength } from 'class-validator'; import { AssetInformationStatus, AssetOperationalStatus } from '../../database/entities'; export class ListAssetTreeQueryDto { @IsOptional() @IsString() @MaxLength(200) search?: string; @IsOptional() @IsUUID('4') typeId?: string; @IsOptional() @IsEnum(AssetInformationStatus) status?: AssetInformationStatus; @IsOptional() @IsEnum(AssetOperationalStatus) operationalStatus?: AssetOperationalStatus; @IsOptional() @IsUUID('4') operationalAreaId?: string; /** * Retenido sólo para compatibilidad tipada. El árbol operativo no puede * filtrar por el snapshot histórico de Empresa del Inventario. */ @IsOptional() @IsEmpty({ message: 'Filtrá la Operadora mediante la relación temporal del Área, no mediante el snapshot del Inventario' }) operatorCompanyId?: string; @IsOptional() @Transform(({ value }) => value === 'true' ? true : value === 'false' ? false : value) @IsBoolean() needsValidation?: boolean; @IsOptional() @Transform(({ value }) => value === 'true' ? true : value === 'false' ? false : value) @IsBoolean() hasGeometry?: boolean; @IsOptional() @Transform(({ value }) => value === 'true' ? true : value === 'false' ? false : value) @IsBoolean() inventoryOnly?: boolean; }