View Source OnePiece.Commanded.Aggregate behaviour (OnePiece.Commanded v0.19.0)

Defines "Aggregate" modules.

Link to this section Summary

Types

t()

A struct that represents an aggregate.

Callbacks

Apply a given event to the aggregate returning the new aggregate state.

Functions

Convert the module into a Aggregate behaviour and a t/0.

Link to this section Types

@type event() :: struct()
@type t() :: struct()

A struct that represents an aggregate.

Link to this section Callbacks

@callback apply(aggregate :: t(), event :: event()) :: t()

Apply a given event to the aggregate returning the new aggregate state.

example

Example

def apply(%MyAggregate{} = aggregate, %MyEvent{} = event) do
  aggregate
  |> Map.put(:name, event.name)
  |> Map.put(:description, event.description)
end

Link to this section Functions

Link to this macro

__using__(opts \\ [])

View Source (macro)
@spec __using__(opts :: []) :: 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.

using

Using

usage

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