24 lines
744 B
TypeScript
24 lines
744 B
TypeScript
import { Result, ValueObject } from "@common/domain";
|
|
import { z } from "zod";
|
|
|
|
export class EmailAddress extends ValueObject<string | null> {
|
|
static create(email: string | null): Result<EmailAddress, Error> {
|
|
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;
|
|
}
|
|
}
|