View Source OnePiece.Commanded.Aggregate behaviour (OnePiece.Commanded v0.21.3)
Defines "Aggregate" modules.
Summary
Callbacks
Apply a given event to the aggregate returning the new aggregate state.
Types
Callbacks
Functions
@spec __using__( opts :: OnePiece.Commanded.Entity.using_opts() | [{:identity_prefix, String.t() | nil}] ) :: any()
Convert the module into a Aggregate
behaviour and a t/0
.
It adds an apply/2
callback to the module as a fallback, return the aggregate as it is.
Options
:identifier
- The aggregate identifier key.:identity_prefix
(optional) - The prefix to be used for the identity.
Identifier
The identifier
is used to identify the aggregate. It uses the @primary_key
attribute to define the column and type.
Schema Field Registration
identifier
is automatically registered as a field in the embedded_schema
.
Do not define the field in the embedded_schema
yourself again.
Using
Usage
defmodule Account do
use OnePiece.Commanded.Aggregate, identifier: :name
embedded_schema do
field :description, :string
end
@impl OnePiece.Commanded.Aggregate
def apply(%Account{} = aggregate, %AccountOpened{} = event) do
aggregate
|> Map.put(:name, event.name)
|> Map.put(:description, event.description)
end
end