import { Transform, Type } from 'class-transformer'; import { IsISO8601, IsNumber, IsOptional, IsString, Max, MaxLength, Min, } from 'class-validator'; export class UploadFieldInventoryPhotoDto { @IsOptional() @Transform(({ value }) => typeof value === 'string' && value.trim() ? value.trim() : null) @IsString() @MaxLength(200) title?: string | null; @IsOptional() @Transform(({ value }) => typeof value === 'string' && value.trim() ? value.trim() : null) @IsString() @MaxLength(4000) description?: string | null; @Type(() => Number) @IsNumber({ maxDecimalPlaces: 6 }) @Min(-90) @Max(90) deviceLatitude!: number; @Type(() => Number) @IsNumber({ maxDecimalPlaces: 6 }) @Min(-180) @Max(180) deviceLongitude!: number; @IsOptional() @Type(() => Number) @IsNumber({ maxDecimalPlaces: 3 }) @Min(0) @Max(100000) deviceAccuracyM?: number; @IsISO8601({ strict: true }) deviceCapturedAt!: string; @IsOptional() @Transform(({ value }) => typeof value === 'string' && value.trim() ? value.trim() : null) @IsString() @MaxLength(255) deviceLabel?: string | null; @IsOptional() @Type(() => Number) @IsNumber({ maxDecimalPlaces: 6 }) @Min(-90) @Max(90) exifLatitude?: number; @IsOptional() @Type(() => Number) @IsNumber({ maxDecimalPlaces: 6 }) @Min(-180) @Max(180) exifLongitude?: number; @IsOptional() @IsISO8601({ strict: true }) exifCapturedAt?: string; }