Skip to content

Commit ee7dd93

Browse files
committed
refactor: improve value objects definition
1 parent ff661f7 commit ee7dd93

File tree

12 files changed

+47
-47
lines changed

12 files changed

+47
-47
lines changed

src/domain/sessions/session-user-data.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { ValueObject } from '@domain/shared/value-object';
1+
import { CompositeValueObject } from '@domain/shared/value-object';
22

3-
class SessionUserData extends ValueObject {
3+
class SessionUserData extends CompositeValueObject {
44
readonly username: string;
55

66
readonly email: string;

src/domain/shared/types.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
11
type Nullable<T> = T | null | undefined;
22

3-
type Primitive = bigint | boolean | null | number | string | symbol | undefined;
4-
5-
type PlainObject = Record<string, Primitive>;
6-
7-
export { Nullable, PlainObject, Primitive };
3+
export { Nullable };
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { deepEqual } from 'fast-equals';
2+
3+
abstract class CompositeValueObject {
4+
public equalsTo(other: CompositeValueObject): boolean {
5+
return other.constructor.name === this.constructor.name && deepEqual(this, other);
6+
}
7+
8+
public toString(): string {
9+
return JSON.stringify(this);
10+
}
11+
}
12+
13+
export { CompositeValueObject };

src/domain/shared/value-object/date-value-object.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,7 @@ import { DateTime } from 'luxon';
22

33
import { ValueObject } from './value-object';
44

5-
abstract class DateValueObject extends ValueObject {
6-
readonly value: Date;
7-
8-
constructor(value: Date) {
9-
super();
10-
this.value = value;
11-
}
12-
5+
abstract class DateValueObject extends ValueObject<Date> {
136
public static fromISOString<T extends DateValueObject>(this: new (value: Date) => T, dateISOString: string): T {
147
const dateObject = DateTime.fromISO(dateISOString).toJSDate();
158
return new this(dateObject);

src/domain/shared/value-object/enum-value-object.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
1-
import { ValueObject } from './value-object';
2-
3-
abstract class EnumValueObject<T> extends ValueObject {
1+
abstract class EnumValueObject<T> {
42
readonly value: T;
53

64
constructor(
75
value: T,
86
public readonly validValues: T[]
97
) {
10-
super();
11-
this.checkIfValueIsValid(value);
128
this.value = value;
9+
this.checkIfValueIsValid(value);
1310
}
1411

1512
public checkIfValueIsValid(value: T): void {

src/domain/shared/value-object/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export * from './composite-value-object';
12
export * from './date-value-object';
23
export * from './enum-value-object';
34
export * from './number-value-object';

src/domain/shared/value-object/invalid-argument-error.ts

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/domain/shared/value-object/number-value-object.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
11
import { ValueObject } from './value-object';
22

3-
abstract class NumberValueObject extends ValueObject {
4-
readonly value: number;
5-
6-
constructor(value: number) {
7-
super();
8-
this.value = value;
9-
}
10-
3+
abstract class NumberValueObject extends ValueObject<number> {
114
public isBiggerThan(other: NumberValueObject): boolean {
125
return this.value > other.value;
136
}

src/domain/shared/value-object/string-value-object.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
11
import { ValueObject } from './value-object';
22

3-
abstract class StringValueObject extends ValueObject {
4-
readonly value: string;
5-
6-
constructor(value: string) {
7-
super();
8-
this.value = value;
9-
}
10-
3+
abstract class StringValueObject extends ValueObject<string> {
114
public toString(): string {
125
return this.value;
136
}

src/domain/shared/value-object/uuid.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ import { StringValueObject } from './string-value-object';
77
class Uuid extends StringValueObject {
88
constructor(value: string) {
99
super(value);
10-
this.checkIfValueIsValid(value);
10+
this.ensureValueIsValid(value);
1111
}
1212

1313
public static random(): Uuid {
1414
return new Uuid(v4());
1515
}
1616

17-
private checkIfValueIsValid(value: string): void {
17+
private ensureValueIsValid(value: string): void {
1818
if (!validate(value)) {
1919
throw new InvalidParameterException(`<${this.constructor.name}> does not allow the value <${value}>`);
2020
}

0 commit comments

Comments
 (0)