Files
TodoList/apps/api/src/ai/dto/list-ai-usage-logs-query.dto.ts
T

49 lines
985 B
TypeScript

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;
}