Packages
one_piece_commanded
0.7.4
0.26.0
0.25.2
0.25.1
0.25.0
0.24.0
0.23.0
0.22.0
0.21.4
0.21.3
0.21.2
0.21.1
0.21.0
0.20.0
0.19.1
0.19.0
0.18.0
0.17.0
0.16.0
0.15.2
0.15.1
0.15.0
0.14.0
0.13.0
0.12.0
0.11.1
0.11.0
0.10.1
0.10.0
0.9.1
0.9.0
0.8.0
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.0
0.5.0
0.4.1
0.4.0
0.3.0
0.2.1
0.2.0
0.1.3
0.1.2
0.1.1
0.1.0
Extend Commanded package
Current section
Files
Jump to
Current section
Files
lib/one_piece/commanded/aggregate.ex
defmodule OnePiece.Commanded.Aggregate do
@moduledoc """
Defines the an `OnePiece.Commanded.Aggregate` behaviour.
"""
@type t :: struct()
@type event :: struct()
@doc """
Apply a given event to the aggregate returning the new aggregate state.
## Example
def apply(account, event) do
account
|> Map.put(:name, event.name)
|> Map.put(:description, event.description)
end
"""
@callback apply(aggregate :: t(), event :: event()) :: t()
@doc """
Convert the module into a `Aggregate` behaviour.
## Usage
defmodule Account do
use OnePiece.Commanded.Aggregate
@impl OnePiece.Commanded.Aggregate
def apply(account, event) do
account
|> Map.put(:name, event.name)
|> Map.put(:description, event.description)
end
end
"""
@spec __using__(opts :: []) :: any()
defmacro __using__(_opts \\ []) do
quote do
@behaviour OnePiece.Commanded.Aggregate
end
end
end