Packages
commanded
1.4.8
1.4.10
1.4.9
1.4.8
1.4.7
1.4.6
1.4.3
1.4.2
1.4.1
1.4.0
1.4.0-rc.0
1.3.1
1.3.0
1.2.0
1.1.1
1.1.0
1.0.1
1.0.0
1.0.0-rc.1
1.0.0-rc.0
0.19.1
0.19.0
0.18.1
0.18.0
0.17.5
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.0
0.16.0-rc.1
0.16.0-rc.0
0.15.1
0.15.0
0.14.0
0.14.0-rc.0
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.5
0.8.4
0.8.3
0.8.1
0.8.0
0.7.1
0.6.2
0.6.1
0.6.0
0.4.0
0.3.1
0.3.0
0.2.1
0.2.0
0.1.0
Use Commanded to build your own Elixir applications following the CQRS/ES pattern.
Current section
Files
Jump to
Current section
Files
lib/commanded/commands/handler.ex
defmodule Commanded.Commands.Handler do
@moduledoc """
Defines the behaviour a command handler module must implement to support command dispatch.
## Example
An open account handler that delegates to a bank account aggregate:
defmodule OpenAccountHandler do
@behaviour Commanded.Commands.Handler
def handle(%BankAccount{} = aggregate, %OpenAccount{} = command) do
%OpenAccount{account_number: account_number, initial_balance: initial_balance} = command
BankAccount.open_account(aggregate, account_number, initial_balance)
end
end
"""
@type aggregate :: struct()
@type command :: struct()
@type domain_event :: struct
@type reason :: any()
@doc """
Apply the given command to the event sourced aggregate.
You must return a single domain event, a list containing the pending events,
or `nil`, `[]`, or `:ok` when no events are produced.
You should return `{:error, reason}` on failure.
"""
@callback handle(aggregate, command) ::
domain_event
| list(domain_event)
| {:ok, domain_event}
| {:ok, list(domain_event)}
| :ok
| nil
| {:error, reason}
end