Commanded v1.0.0 Commanded.Middleware behaviour View Source

Middleware provides an extension point to add functions that you want to be called for every command the router dispatches.

Examples include command validation, authorization, and logging.

Implement the Commanded.Middleware behaviour in your module and define the before_dispatch/1, after_dispatch/1, and after_failure/1 callback functions.

Example middleware

defmodule NoOpMiddleware do
  @behaviour Commanded.Middleware

  alias Commanded.Middleware.Pipeline
  import Pipeline

  def before_dispatch(%Pipeline{command: command} = pipeline) do
    pipeline
  end

  def after_dispatch(%Pipeline{command: command} = pipeline) do
    pipeline
  end

  def after_failure(%Pipeline{command: command} = pipeline) do
    pipeline
  end
end

Import the Commanded.Middleware.Pipeline module to access convenience functions.

  • assign/3 - puts a key and value into the assigns map
  • halt/1 - stops execution of further middleware downstream and prevents dispatch of the command when used in a before_dispatch callback

Link to this section Summary

Link to this section Types

Link to this type

pipeline()

View Source
pipeline() :: %Commanded.Middleware.Pipeline{
  application: term(),
  assigns: term(),
  causation_id: term(),
  command: term(),
  command_uuid: term(),
  consistency: term(),
  correlation_id: term(),
  halted: term(),
  identity: term(),
  identity_prefix: term(),
  metadata: term(),
  response: term()
}

Link to this section Callbacks

Link to this callback

after_dispatch(pipeline)

View Source
after_dispatch(pipeline()) :: pipeline()
Link to this callback

after_failure(pipeline)

View Source
after_failure(pipeline()) :: pipeline()
Link to this callback

before_dispatch(pipeline)

View Source
before_dispatch(pipeline()) :: pipeline()