Orkestra.Event behaviour (orkestra v0.2.0)

Copy Markdown View Source

Behaviour and struct builder for domain events.

An event represents something that happened in the system. Events are immutable facts — they are never rejected or retried.

Defining an event

defmodule MyApp.Tasks.Events.AssessmentCompleted do
  use Orkestra.Event

  field :task_id, :string, required: true
  field :expert_name, :string, required: true
  field :action_name, :string, required: true
  field :status, :string, required: true
  field :result, :map, default: %{}
  field :cost_usd, :float, default: 0.0
end

Emitting an event

{:ok, event} = AssessmentCompleted.new(%{
  task_id: "task_123",
  expert_name: "architect",
  action_name: "perform-assessment",
  status: "success",
  result: %{...}
})

# From a command (preserves correlation, sets causation)
{:ok, event} = AssessmentCompleted.from_command(command, %{
  task_id: "task_123",
  ...
})

Summary

Types

field_definition()

@type field_definition() :: {atom(), atom(), keyword()}

t()

@type t() :: %{
  __struct__: atom(),
  id: String.t(),
  type: String.t(),
  data: map(),
  metadata: Orkestra.Metadata.t(),
  occurred_at: DateTime.t()
}

Callbacks

field_definitions()

@callback field_definitions() :: [field_definition()]

Functions

field(name, type, opts \\ [])

(macro)

Declares an event field.

generate_id()