/** * 聊天历史中的单条消息 DTO */ import { ChatMessageSchema, type ChatMessageInput, type ChatMessageData, type ChatImageData, type ChatLockDetailData, } from "@/data/schemas/chat"; export class ChatMessage { declare readonly role: string; declare readonly type: string; declare readonly content: string; declare readonly id: string; declare readonly createdAt: string; declare readonly audioUrl: string | null; declare readonly image: ChatImageData; declare readonly lockDetail: ChatLockDetailData; private constructor(input: ChatMessageInput) { const data = ChatMessageSchema.parse(input); Object.assign(this, data); Object.freeze(this); } static from(input: ChatMessageInput): ChatMessage { return new ChatMessage(input); } static fromJson(json: unknown): ChatMessage { return ChatMessage.from(json as ChatMessageInput); } toJson(): ChatMessageData { return ChatMessageSchema.parse(this); } }