import { Result, ValueObject } from "@common/domain"; import { z } from "zod"; export class Username extends ValueObject { static create(username: string): Result { const result = Username.validate(username); return result.success ? Result.ok(new Username(result.data)) : Result.fail(new Error(result.error.errors[0].message)); } private static validate(username: string) { const schema = z .string() .min(3, { message: "Username must be at least 3 characters long" }) .max(30, { message: "Username cannot exceed 30 characters" }) .regex(/^[a-zA-Z0-9_]+$/, { message: "Username can only contain letters, numbers, and underscores", }); return schema.safeParse(username); } }