2025-01-29 19:02:59 +00:00
|
|
|
import { v4 as uuidv4 } from "uuid";
|
|
|
|
|
import { z } from "zod";
|
2025-02-01 21:48:13 +00:00
|
|
|
import { Result } from "../result";
|
2025-01-29 19:02:59 +00:00
|
|
|
import { ValueObject } from "./value-object";
|
|
|
|
|
|
|
|
|
|
const UUIDSchema = z.string().uuid({ message: "Invalid UUID format" });
|
|
|
|
|
|
|
|
|
|
export class UniqueID extends ValueObject<string> {
|
|
|
|
|
static create(id?: string, generateOnEmpty: boolean = false): Result<UniqueID, Error> {
|
|
|
|
|
if (!id) {
|
|
|
|
|
return generateOnEmpty
|
|
|
|
|
? UniqueID.generateNewID()
|
|
|
|
|
: Result.fail(new Error("ID is null or empty"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const result = UniqueID.validate(id.trim());
|
|
|
|
|
|
|
|
|
|
return result.success
|
|
|
|
|
? Result.ok(new UniqueID(result.data))
|
|
|
|
|
: Result.fail(new Error(result.error.errors[0].message));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static generate(): UniqueID {
|
|
|
|
|
return new UniqueID(uuidv4());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static validate(id: string) {
|
|
|
|
|
const schema = z.string().uuid({ message: "Invalid UUID format" });
|
|
|
|
|
return schema.safeParse(id.trim());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static generateNewID(): Result<UniqueID, never> {
|
|
|
|
|
return Result.ok(new UniqueID(uuidv4()));
|
|
|
|
|
}
|
|
|
|
|
}
|