49 lines
985 B
TypeScript
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;
|
|
}
|