View Source Commanded.EventStore.Adapter behaviour (Commanded v1.4.8)

Defines the behaviour to be implemented by an event store adapter to be used by Commanded.

Summary

Callbacks

Acknowledge receipt and successful processing of the given event received from a subscription to an event stream.

Append one or more events to a stream atomically.

Return a child spec defining all processes required by the event store.

Delete a previously recorded snapshot for a given source

Read a snapshot, if available, for a given source.

Record a snapshot of the data and metadata for a given source

Streams events from the given stream, in the order in which they were originally written.

Create a transient subscription to a single event stream.

Create a persistent subscription to an event stream.

Unsubscribe an existing subscriber from event notifications.

Types

adapter_meta()

@type adapter_meta() :: map()

application()

@type application() :: Commanded.Application.t()

config()

@type config() :: Keyword.t()

error()

@type error() :: term()

expected_version()

@type expected_version() ::
  :any_version | :no_stream | :stream_exists | non_neg_integer()

source_uuid()

@type source_uuid() :: String.t()

start_from()

@type start_from() :: :origin | :current | integer()

stream_uuid()

@type stream_uuid() :: String.t()

subscriber()

@type subscriber() :: pid()

subscription()

@type subscription() :: any()

subscription_name()

@type subscription_name() :: String.t()

Callbacks

ack_event(adapter_meta, pid, t)

@callback ack_event(adapter_meta(), pid(), Commanded.EventStore.RecordedEvent.t()) :: :ok

Acknowledge receipt and successful processing of the given event received from a subscription to an event stream.

append_to_stream(adapter_meta, stream_uuid, expected_version, events, opts)

@callback append_to_stream(
  adapter_meta(),
  stream_uuid(),
  expected_version(),
  events :: [Commanded.EventStore.EventData.t()],
  opts :: Keyword.t()
) :: :ok | {:error, :wrong_expected_version} | {:error, error()}

Append one or more events to a stream atomically.

child_spec(application, config)

@callback child_spec(application(), config()) ::
  {:ok, [:supervisor.child_spec() | {module(), term()} | module()],
   adapter_meta()}

Return a child spec defining all processes required by the event store.

delete_snapshot(adapter_meta, source_uuid)

@callback delete_snapshot(adapter_meta(), source_uuid()) :: :ok | {:error, error()}

Delete a previously recorded snapshot for a given source

delete_subscription(adapter_meta, arg2, subscription_name)

@callback delete_subscription(
  adapter_meta(),
  stream_uuid() | :all,
  subscription_name()
) :: :ok | {:error, :subscription_not_found} | {:error, error()}

Delete an existing subscription.

read_snapshot(adapter_meta, source_uuid)

@callback read_snapshot(adapter_meta(), source_uuid()) ::
  {:ok, Commanded.EventStore.SnapshotData.t()} | {:error, :snapshot_not_found}

Read a snapshot, if available, for a given source.

record_snapshot(adapter_meta, t)

@callback record_snapshot(adapter_meta(), Commanded.EventStore.SnapshotData.t()) ::
  :ok | {:error, error()}

Record a snapshot of the data and metadata for a given source

stream_forward(adapter_meta, stream_uuid, start_version, read_batch_size)

@callback stream_forward(
  adapter_meta(),
  stream_uuid(),
  start_version :: non_neg_integer(),
  read_batch_size :: non_neg_integer()
) :: Enumerable.t() | {:error, :stream_not_found} | {:error, error()}

Streams events from the given stream, in the order in which they were originally written.

subscribe(adapter_meta, arg2)

@callback subscribe(adapter_meta(), stream_uuid() | :all) :: :ok | {:error, error()}

Create a transient subscription to a single event stream.

The event store will publish any events appended to the given stream to the subscriber process as an {:events, events} message.

The subscriber does not need to acknowledge receipt of the events.

subscribe_to(adapter_meta, arg2, subscription_name, subscriber, start_from, opts)

@callback subscribe_to(
  adapter_meta(),
  stream_uuid() | :all,
  subscription_name(),
  subscriber(),
  start_from(),
  opts :: Keyword.t()
) ::
  {:ok, subscription()}
  | {:error, :subscription_already_exists}
  | {:error, error()}

Create a persistent subscription to an event stream.

unsubscribe(adapter_meta, subscription)

@callback unsubscribe(adapter_meta(), subscription()) :: :ok

Unsubscribe an existing subscriber from event notifications.

This should not delete the subscription.