View Source OnePiece.Commanded.Command (OnePiece.Commanded v0.22.0)

Defines "Command" modules.

Summary

Types

The aggregate identifier key of the event.

t()

A struct that represents a command.

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 a command.

Functions

__using__(opts \\ [])

(macro)
@spec __using__(
  opts :: [
    aggregate_identifier: aggregate_identifier_opt(),
    identity_prefix: String.t() | nil
  ]
) :: any()

Converts the module into an t/0.

Options

  • :aggregate_identifier - The aggregate identifier key.
  • :identity_prefix (optional) - The prefix to be used for the identity.

Aggregate Identifier

The aggregate_identifier is used to identify the aggregate that the command 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 MyCommand do
  use OnePiece.Commanded.Command, 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 AssignRole do
  use OnePiece.Commanded.Command,
    aggregate_identifier: {:id, IdentityRoleId}

  embedded_schema do
    # ...
  end
end