/** * 用户 DTO */ import { UserSchema, type UserInput, type UserData, } from "@/data/schemas/user/user"; import { PersonalityTraits } from "./personality_traits"; export class User { declare readonly id: string; declare readonly username: string; declare readonly email: string; declare readonly platform: string; declare readonly country: string; declare readonly countryCode: string; declare readonly intimacy: number; declare readonly dolBalance: number; declare readonly creditBalance: number; declare readonly dailyFreeChatLimit: number; declare readonly dailyFreeChatUsed: number; declare readonly dailyFreeChatRemaining: number; declare readonly dailyFreePrivateLimit: number; declare readonly dailyFreePrivateUsed: number; declare readonly dailyFreePrivateRemaining: number; declare readonly personalityTraits: PersonalityTraits; declare readonly preferredLanguage: string; declare readonly createdAt: string; declare readonly lastMessageAt: string; private constructor(input: UserInput) { const data = UserSchema.parse(input); Object.assign(this, { ...data, personalityTraits: PersonalityTraits.from(data.personalityTraits), }); Object.freeze(this); } static from(input: UserInput): User { return new User(input); } static fromJson(json: unknown): User { return User.from(json as UserInput); } /** * 创建一个具有空 id/username 的 User 实例(用于可选 user 字段的默认占位) */ static empty(): User { return new User({ id: "", username: "" }); } toJson(): UserData { const { personalityTraits, ...rest } = this; return { ...rest, personalityTraits: personalityTraits.toJson(), }; } }