diff --git a/core/shared/src/main/scala/works/iterative/entity/AggregateError.scala b/core/shared/src/main/scala/works/iterative/entity/AggregateError.scala new file mode 100644 index 0000000..9b8f18c --- /dev/null +++ b/core/shared/src/main/scala/works/iterative/entity/AggregateError.scala @@ -0,0 +1,6 @@ +package works.iterative.entity + +import works.iterative.core.UserMessage + +trait AggregateError: + def userMessage: UserMessage diff --git a/core/shared/src/main/scala/works/iterative/entity/AggregateError.scala b/core/shared/src/main/scala/works/iterative/entity/AggregateError.scala new file mode 100644 index 0000000..9b8f18c --- /dev/null +++ b/core/shared/src/main/scala/works/iterative/entity/AggregateError.scala @@ -0,0 +1,6 @@ +package works.iterative.entity + +import works.iterative.core.UserMessage + +trait AggregateError: + def userMessage: UserMessage diff --git a/core/shared/src/main/scala/works/iterative/entity/AggregateRoot.scala b/core/shared/src/main/scala/works/iterative/entity/AggregateRoot.scala new file mode 100644 index 0000000..2bc42b4 --- /dev/null +++ b/core/shared/src/main/scala/works/iterative/entity/AggregateRoot.scala @@ -0,0 +1,23 @@ +package works.iterative.entity + +import zio.* + +/** Represents aggregate root in DDD + * + * @tparam Id + * Aggregate root id + * @tparam Command + * Aggregate root command + * @tparam Event + * Aggregate root event + * @tparam State + * Aggregate root state + */ +trait AggregateRoot[Id, Command, Event, State, Error <: AggregateError]: + /** Aggregate root id */ + def id: Id + + /** Current state */ + def state: UIO[State] + + def handle(command: Command): IO[Error, Unit]