import { Transform, Type } from "class-transformer"; import { IsBoolean, IsEnum, IsInt, IsOptional, Max, Min } from "class-validator"; import { AiChannel } from "../../../generated/prisma/client"; function normalizeBoolean(value: unknown): boolean | undefined { if (typeof value === "boolean") { return value; } if (typeof value !== "string") { return undefined; } const normalized = value.trim().toLowerCase(); if (normalized === "true" || normalized === "1") { return true; } if (normalized === "false" || normalized === "0") { return false; } return undefined; } export class ListAiUsageLogsQueryDto { @Type(() => Number) @IsOptional() @IsInt() @Min(1) page?: number; @Type(() => Number) @IsOptional() @IsInt() @Min(1) @Max(100) pageSize?: number; @IsOptional() @IsEnum(AiChannel) channel?: AiChannel; @Transform(({ value }) => normalizeBoolean(value)) @IsOptional() @IsBoolean() success?: boolean; }