.
This commit is contained in:
parent
f5c9a0a995
commit
6649374ad8
@ -17,6 +17,6 @@ export class UserRoles extends ValueObject<string[]> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
hasRole(role: string): boolean {
|
hasRole(role: string): boolean {
|
||||||
return this.value.includes(role);
|
return this._value.includes(role);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,8 +16,4 @@ export class EmailAddress extends ValueObject<string | null> {
|
|||||||
const schema = z.string().email({ message: "Invalid email format" }).or(z.null());
|
const schema = z.string().email({ message: "Invalid email format" }).or(z.null());
|
||||||
return schema.safeParse(email);
|
return schema.safeParse(email);
|
||||||
}
|
}
|
||||||
|
|
||||||
isEmpty(): boolean {
|
|
||||||
return this.value === null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,6 +30,6 @@ export class PasswordHash extends ValueObject<string> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async compare(plainPassword: string): Promise<boolean> {
|
async compare(plainPassword: string): Promise<boolean> {
|
||||||
return await bcrypt.compare(plainPassword, this.value);
|
return await bcrypt.compare(plainPassword, this._value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,13 +1,10 @@
|
|||||||
import { shallowEqual } from "shallow-equal-object";
|
import { shallowEqual } from "shallow-equal-object";
|
||||||
|
|
||||||
export abstract class ValueObject<T> {
|
export abstract class ValueObject<T> {
|
||||||
protected readonly value: T;
|
protected readonly _value: T;
|
||||||
|
|
||||||
protected constructor(value: T) {
|
protected constructor(value: T) {
|
||||||
if (value === null || value === undefined) {
|
this._value = typeof value === "object" && value !== null ? Object.freeze(value) : value;
|
||||||
throw new Error("ValueObject value cannot be null or undefined");
|
|
||||||
}
|
|
||||||
this.value = typeof value === "object" ? Object.freeze(value) : value;
|
|
||||||
|
|
||||||
Object.freeze(this);
|
Object.freeze(this);
|
||||||
}
|
}
|
||||||
@ -17,22 +14,22 @@ export abstract class ValueObject<T> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (other.value === undefined) {
|
if (other._value === undefined || other._value === null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return shallowEqual(this.value, other.value);
|
return shallowEqual(this._value, other._value);
|
||||||
}
|
}
|
||||||
|
|
||||||
getValue(): T {
|
getValue(): T {
|
||||||
return this.value;
|
return this._value;
|
||||||
|
}
|
||||||
|
|
||||||
|
isEmpty(): boolean {
|
||||||
|
return this._value === null || this._value === undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
toString(): string {
|
toString(): string {
|
||||||
return String(this.value);
|
return this._value !== null && this._value !== undefined ? String(this._value) : "";
|
||||||
}
|
|
||||||
|
|
||||||
clone(): this {
|
|
||||||
return Object.create(this);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
0
apps/server/tests/setup.ts
Normal file
0
apps/server/tests/setup.ts
Normal file
Loading…
Reference in New Issue
Block a user