import { Result, ValueObject } from "@common/domain"; import { z } from "zod"; export class EmailAddress extends ValueObject { static create(email: string | null): Result { const normalizedEmail = email?.trim() === "" ? null : email?.toLowerCase() || null; const result = EmailAddress.validate(normalizedEmail); return result.success ? Result.ok(new EmailAddress(result.data)) : Result.fail(new Error(result.error.errors[0].message)); } private static validate(email: string | null) { const schema = z.string().email({ message: "Invalid email format" }).or(z.null()); return schema.safeParse(email); } isEmpty(): boolean { return this.value === null; } }