Chronik v0.1.6 Chronik.Aggregate.Multi View Source

Chronik.Aggregate.Multi can be used to generate a single commmand that affects multiple entities.

As can be seen on the test a multiple-entity command can be defined as:

Example

alias Chronik.Aggregate.Multi

def handle_command({:update_name_and_max, name, max}, %Counter{id: id} = state) do
  state
  |> Multi.new(__MODULE__)
  |> Multi.delegate(&(&1.name), &rename(&1, id, name))
  |> Multi.delegate(&(&1.max), &update_max(&1, id, max))
  |> Multi.run()
end

This command affects both the :name entity and the :max entity in a transaction like manner. The update_max/3 receives the updated aggregate state.

Link to this section Summary

Functions

Applies val_fun on a given entity

Create a new state for a multi-entity command

Run a concatenation of entities updates and return the domain events generated

Applies the val_fun function on the aggregate state

Link to this section Types

Link to this section Functions

Link to this function delegate(arg, lens_fun, validator_fun) View Source
delegate(ms :: monad_state, lens :: (... -> any), validator_fun :: (... -> any)) :: monad_state

Applies val_fun on a given entity.

The state of the entity is obtained using the lens_fun function.

Link to this function new(state, module) View Source
new(state :: Chronik.Aggregate.state, module :: module) :: monad_state

Create a new state for a multi-entity command.

Run a concatenation of entities updates and return the domain events generated.

Link to this function validate(arg, validator_fun) View Source
validate(ms :: monad_state, validator_fun :: (... -> any)) :: monad_state

Applies the val_fun function on the aggregate state.