From e34ff50eb024d0b9f0762a30b5bd8f2594890d47 Mon Sep 17 00:00:00 2001 From: Thomas Kortyka Date: Sun, 2 Jun 2024 21:13:40 +0200 Subject: [PATCH] feat: add aggregate, edit anemic, add data --- .../src/lib/aggregates/group.aggregate.ts | 71 +++++++++++++++++++ libs/group-domain/src/lib/aggregates/index.ts | 2 +- .../src/lib/anemics/group.anemic.ts | 2 + libs/group-domain/src/lib/data/group.data.ts | 3 + libs/group-domain/src/lib/data/index.ts | 2 +- libs/group-domain/src/lib/index.ts | 9 ++- libs/group-domain/src/lib/services/index.ts | 1 + .../group-domain/src/lib/validations/index.ts | 1 + .../src/lib/valueObjects/index.ts | 1 + 9 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 libs/group-domain/src/lib/aggregates/group.aggregate.ts create mode 100644 libs/group-domain/src/lib/data/group.data.ts create mode 100644 libs/group-domain/src/lib/services/index.ts create mode 100644 libs/group-domain/src/lib/validations/index.ts create mode 100644 libs/group-domain/src/lib/valueObjects/index.ts diff --git a/libs/group-domain/src/lib/aggregates/group.aggregate.ts b/libs/group-domain/src/lib/aggregates/group.aggregate.ts new file mode 100644 index 00000000..5a722844 --- /dev/null +++ b/libs/group-domain/src/lib/aggregates/group.aggregate.ts @@ -0,0 +1,71 @@ +import { Domain } from '@toxictoast/azkaban-base-domain'; +import { GroupAnemic } from '../anemics'; +import { Nullable } from '@toxictoast/azkaban-base-types'; + +export class GroupAggregate implements Domain { + constructor( + private readonly id: string, + private title: string, + private slug: string, + private active: boolean, + private readonly created_at: Date, + private updated_at: Nullable, + private deleted_at: Nullable, + ) {} + + isActive(): boolean { + return this.active && !this.isDeleted(); + } + + isUpdated(): boolean { + return !!this.updated_at; + } + + isDeleted(): boolean { + return !!this.deleted_at; + } + + delete(): void { + this.deleted_at = new Date(); + } + + restore(): void { + this.deleted_at = null; + } + + toAnemic(): GroupAnemic { + return { + id: this.id, + title: this.title, + slug: this.slug, + active: this.active, + created_at: this.created_at, + updated_at: this.updated_at, + deleted_at: this.deleted_at, + isActive: this.isActive(), + isUpdated: this.isUpdated(), + isDeleted: this.isDeleted(), + }; + } + + updateTitle(title: string): void { + if (this.title !== title) { + this.updated_at = new Date(); + this.title = title; + } + } + + updateSlug(slug: string): void { + if (this.slug !== slug) { + this.updated_at = new Date(); + this.slug = slug; + } + } + + updateActive(active: boolean): void { + if (this.active !== active) { + this.updated_at = new Date(); + this.active = active; + } + } +} diff --git a/libs/group-domain/src/lib/aggregates/index.ts b/libs/group-domain/src/lib/aggregates/index.ts index cb0ff5c3..94e08ba6 100644 --- a/libs/group-domain/src/lib/aggregates/index.ts +++ b/libs/group-domain/src/lib/aggregates/index.ts @@ -1 +1 @@ -export {}; +export * from './group.aggregate'; diff --git a/libs/group-domain/src/lib/anemics/group.anemic.ts b/libs/group-domain/src/lib/anemics/group.anemic.ts index ac3ffac7..29274e13 100644 --- a/libs/group-domain/src/lib/anemics/group.anemic.ts +++ b/libs/group-domain/src/lib/anemics/group.anemic.ts @@ -3,4 +3,6 @@ import { Anemic } from '@toxictoast/azkaban-base-domain'; export interface GroupAnemic extends Anemic { readonly title: string; readonly slug: string; + readonly active: boolean; + readonly isActive: boolean; } diff --git a/libs/group-domain/src/lib/data/group.data.ts b/libs/group-domain/src/lib/data/group.data.ts new file mode 100644 index 00000000..fd678baa --- /dev/null +++ b/libs/group-domain/src/lib/data/group.data.ts @@ -0,0 +1,3 @@ +export interface GroupData { + readonly title: string; +} diff --git a/libs/group-domain/src/lib/data/index.ts b/libs/group-domain/src/lib/data/index.ts index cb0ff5c3..294273f2 100644 --- a/libs/group-domain/src/lib/data/index.ts +++ b/libs/group-domain/src/lib/data/index.ts @@ -1 +1 @@ -export {}; +export * from './group.data'; diff --git a/libs/group-domain/src/lib/index.ts b/libs/group-domain/src/lib/index.ts index cb0ff5c3..c8bc2b84 100644 --- a/libs/group-domain/src/lib/index.ts +++ b/libs/group-domain/src/lib/index.ts @@ -1 +1,8 @@ -export {}; +export * from './aggregates'; +export * from './anemics'; +export * from './data'; +export * from './factories'; +export * from './repositories'; +export * from './services'; +export * from './validations'; +export * from './valueObjects'; diff --git a/libs/group-domain/src/lib/services/index.ts b/libs/group-domain/src/lib/services/index.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/libs/group-domain/src/lib/services/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/libs/group-domain/src/lib/validations/index.ts b/libs/group-domain/src/lib/validations/index.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/libs/group-domain/src/lib/validations/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/libs/group-domain/src/lib/valueObjects/index.ts b/libs/group-domain/src/lib/valueObjects/index.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/libs/group-domain/src/lib/valueObjects/index.ts @@ -0,0 +1 @@ +export {};