View Source OnePiece.Commanded.Event (OnePiece.Commanded v0.21.4)

Defines "Event" modules.

Summary

Types

The aggregate identifier key of the event.

t()

A struct that represents an event.

Functions

Converts the module into an t/0.

Types

aggregate_identifier_opt()

@type aggregate_identifier_opt() ::
  atom()
  | {key_name :: atom(), type :: atom()}
  | {key_name :: atom(), type :: module()}

The aggregate identifier key of the event.

If it's a tuple, the type must be a module that implements the OnePiece.Commanded.ValueObject module or Ecto built-in types

t()

@type t() :: struct()

A struct that represents an event.

Functions

__using__(opts \\ [])

(macro)
@spec __using__(opts :: [{:aggregate_identifier, aggregate_identifier_opt()}]) ::
  any()

Converts the module into an t/0.

Options

  • :aggregate_identifier - The aggregate identifier key.

Aggregate Identifier

The aggregate_identifier is used to identify the aggregate that the event is associated with. It uses the @primary_key attribute to define the column and type.

Schema Field Registration

aggregate_identifier is automatically registered as a field in the embedded_schema. Do not define the field in the embedded_schema yourself again.

Using

Usage

defmodule MyEvent do
  use OnePiece.Commanded.Event, aggregate_identifier: :id

  embedded_schema do
    # ...
  end
end

You can also define a custom type as the aggregate identifier:

defmodule IdentityRoleId do
  use OnePiece.Commanded.ValueObject

  embedded_schema do
    field :identity_id, :string
    field :role_id, :string
  end
end

defmodule IdentityRoleAssigned do
  use OnePiece.Commanded.Event,
    aggregate_identifier: {:id, IdentityRoleId}

  embedded_schema do
    # ...
  end
end