import { Transform, Type } from 'class-transformer'; import { IsBoolean, IsEmpty, IsEnum, IsInt, IsOptional, IsString, IsUUID, Max, MaxLength, Min, } from 'class-validator'; import { AssetInformationStatus, AssetOperationalStatus } from '../../database/entities'; export class ListAssetsQueryDto { @IsOptional() @Type(() => Number) @IsInt() @Min(1) page = 1; @IsOptional() @Type(() => Number) @IsInt() @Min(1) @Max(100) pageSize = 25; @IsOptional() @IsString() @MaxLength(200) search?: string; @IsOptional() @IsUUID('4') typeId?: string; @IsOptional() @IsEnum(AssetInformationStatus) status?: AssetInformationStatus; @IsOptional() @IsEnum(AssetOperationalStatus) operationalStatus?: AssetOperationalStatus; @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; @IsOptional() @IsUUID('4') parentId?: string; @IsOptional() @IsUUID('4') operationalAreaId?: string; /** * Retenido sólo para compatibilidad tipada con consumidores históricos. * F5/F6 no permite buscar ownership actual por el snapshot de Empresa del * Inventario; la navegación Área↔Operadora usa area_company_relations. */ @IsOptional() @IsEmpty({ message: 'Filtrá la Operadora mediante la relación temporal del Área, no mediante el snapshot del Inventario' }) operatorCompanyId?: string; }