import { z } from "zod" import { Entity, EntitySchema } from "./_Entity" export const UserSchema = EntitySchema.extend({ email: z.string().min(1).email(), displayName: z.string().min(1), }) export const UserRegisterSchema = UserSchema.extend({ password: z.string().min(6), }).omit({ id: true }) export type UserRegisterData = z.infer export const UserLoginSchema = UserRegisterSchema.omit({ displayName: true }) export type UserLoginData = z.infer export type UserData = z.infer export class User extends Entity implements UserData { public email: UserData["email"] public displayName: UserData["displayName"] public constructor(options: UserData) { const { id, email, displayName } = options super({ id }) this.email = email this.displayName = displayName } public override toJSON(): UserData { return { id: this.id, email: this.email, displayName: this.displayName, } } }