36 lines
888 B
TypeScript
36 lines
888 B
TypeScript
/**
|
|
* 头像数据模型 - 对应后端 AvatarData schema
|
|
* 原始 Dart: AvatarData (lib/data/models/user/user.dart)
|
|
*/
|
|
import { z } from "zod";
|
|
|
|
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);
|
|
}
|
|
|
|
static from(input: AvatarDataInput): AvatarData {
|
|
return new AvatarData(AvatarDataSchema.parse(input));
|
|
}
|
|
|
|
static fromJson(json: unknown): AvatarData {
|
|
return AvatarData.from(json as AvatarDataInput);
|
|
}
|
|
|
|
toJson(): AvatarDataData {
|
|
return AvatarDataSchema.parse(this);
|
|
}
|
|
}
|