/** * 聊天历史响应 * */ import { z } from "zod"; import { arrayOrEmpty, booleanOrFalse, numberOrZero, } from "../../nullable-defaults"; import { ChatMessage, ChatMessageSchema } from "../chat_message"; export const ChatHistoryResponseSchema = z.object({ messages: arrayOrEmpty(ChatMessageSchema), total: numberOrZero, limit: numberOrZero, offset: numberOrZero, isVip: booleanOrFalse, privateFreeLimit: numberOrZero, privateUsedToday: numberOrZero, privateCanViewFree: booleanOrFalse, }); export type ChatHistoryResponseInput = z.input; export type ChatHistoryResponseData = z.output; export class ChatHistoryResponse { declare readonly messages: ChatMessage[]; declare readonly total: number; declare readonly limit: number; private constructor(input: ChatHistoryResponseInput) { const data = ChatHistoryResponseSchema.parse(input); Object.assign(this, { ...data, messages: data.messages.map((m) => ChatMessage.from(m)), }); Object.freeze(this); } static from(input: ChatHistoryResponseInput): ChatHistoryResponse { return new ChatHistoryResponse(input); } static fromJson(json: unknown): ChatHistoryResponse { return ChatHistoryResponse.from(json as ChatHistoryResponseInput); } toJson(): ChatHistoryResponseData { return ChatHistoryResponseSchema.parse(this); } }