refactor(models): migrate 28 data models to Zod schema-driven pattern
This commit is contained in:
@@ -1,35 +1,35 @@
|
||||
/**
|
||||
* 头像数据模型 - 对应后端 AvatarData schema
|
||||
* 原始 Dart: AvatarData (lib/data/models/user/user.dart)
|
||||
*
|
||||
* 注:原始 Dart 中 `avatarUrl` 为 `String?`,按"全部非空"约定兜底为空串。
|
||||
*/
|
||||
export class AvatarData {
|
||||
readonly avatarUrl: string;
|
||||
readonly userId: string;
|
||||
import { z } from "zod";
|
||||
|
||||
constructor(params: { avatarUrl?: string; userId: string }) {
|
||||
this.avatarUrl = params.avatarUrl ?? "";
|
||||
this.userId = params.userId;
|
||||
export const AvatarDataSchema = z.object({
|
||||
avatarUrl: z.string().default(""),
|
||||
userId: z.string(),
|
||||
});
|
||||
|
||||
export type AvatarDataInput = z.input<typeof AvatarDataSchema>;
|
||||
export type AvatarDataData = z.output<typeof AvatarDataSchema>;
|
||||
|
||||
export class AvatarData {
|
||||
declare readonly avatarUrl: string;
|
||||
declare readonly userId: string;
|
||||
|
||||
private constructor(data: AvatarDataData) {
|
||||
Object.assign(this, data);
|
||||
Object.freeze(this);
|
||||
}
|
||||
|
||||
toJson(): Record<string, unknown> {
|
||||
return {
|
||||
avatarUrl: this.avatarUrl,
|
||||
userId: this.userId,
|
||||
};
|
||||
static from(input: AvatarDataInput): AvatarData {
|
||||
return new AvatarData(AvatarDataSchema.parse(input));
|
||||
}
|
||||
|
||||
static fromJson(json: Record<string, unknown>): AvatarData {
|
||||
const userId = json.userId;
|
||||
if (typeof userId !== "string") {
|
||||
throw new Error("AvatarData.userId is required and must be a string");
|
||||
}
|
||||
return new AvatarData({
|
||||
userId,
|
||||
avatarUrl:
|
||||
typeof json.avatarUrl === "string" ? json.avatarUrl : undefined,
|
||||
});
|
||||
static fromJson(json: unknown): AvatarData {
|
||||
return AvatarData.from(json as AvatarDataInput);
|
||||
}
|
||||
|
||||
toJson(): AvatarDataData {
|
||||
return AvatarDataSchema.parse(this);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user