Chronicle.EventStoreSubscriptions (cratis_chronicle v1.0.2)

Copy Markdown View Source

Idiomatic API for working with Chronicle event store subscriptions.

Event store subscriptions let one event store subscribe to events emitted from another event store's outbox. They can be registered imperatively, or declared as discoverable modules with use Chronicle.EventStoreSubscriptions.Subscription and auto-registered by Chronicle.Client.

Discoverable subscriptions

defmodule MyApp.EventStoreSubscriptions.DefaultAccountEvents do
  use Chronicle.EventStoreSubscriptions.Subscription,
    source_event_store: "default"

  alias Chronicle.EventStoreSubscriptions.DefinitionBuilder

  @impl true
  def define(builder) do
    builder
    |> DefinitionBuilder.with_event_type(MyApp.Events.AccountOpened)
    |> DefinitionBuilder.with_event_type(MyApp.Events.FundsDeposited)
  end
end

Imperative registration

:ok =
  Chronicle.EventStoreSubscriptions.subscribe(
    "account-events-from-default",
    "default",
    fn builder ->
      builder
      |> Chronicle.EventStoreSubscriptions.DefinitionBuilder.with_event_type(
        MyApp.Events.AccountOpened
      )
    end
  )

Options

  • :client — the client name (default: Chronicle.Client)
  • :namespace — accepted for consistency with other APIs and ignored here

Summary

Functions

Discovers event store subscription definitions from the configured client or loaded modules.

Registers a single discoverable event store subscription module.

Registers all discoverable event store subscriptions.

Registers an event store subscription imperatively using all available event types.

Registers an event store subscription imperatively.

Removes an event store subscription by identifier.

Functions

discover(opts \\ [])

Discovers event store subscription definitions from the configured client or loaded modules.

register(subscription_module, opts)

@spec register(
  module(),
  keyword()
) :: :ok | {:error, term()}

Registers a single discoverable event store subscription module.

register_discovered(opts \\ [])

@spec register_discovered(keyword()) :: :ok | {:error, term()}

Registers all discoverable event store subscriptions.

subscribe(subscription_id, source_event_store, opts)

@spec subscribe(String.t(), String.t(), keyword()) :: :ok | {:error, term()}

Registers an event store subscription imperatively using all available event types.

subscribe(subscription_id, source_event_store, configure, opts \\ [])

Registers an event store subscription imperatively.

unsubscribe(subscription_id, opts \\ [])

@spec unsubscribe(
  String.t(),
  keyword()
) :: :ok | {:error, term()}

Removes an event store subscription by identifier.