Commanded v1.2.0 Commanded.Commands.Handler behaviour View Source

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

Link to this section Summary

Callbacks

Apply the given command to the event sourced aggregate.

Link to this section Types

Specs

aggregate() :: struct()

Specs

command() :: struct()

Specs

domain_event() :: struct()

Specs

reason() :: any()

Link to this section Callbacks

Link to this callback

handle(aggregate, command)

View Source

Specs

handle(aggregate(), command()) ::
  domain_event()
  | [domain_event()]
  | {:ok, domain_event()}
  | {:ok, [domain_event()]}
  | :ok
  | nil
  | {:error, reason()}

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.