View Source Sorcery.EventStore (Sorcery v0.1.0)
Provides a clean interface for storing and retrieving events.
Configuration
In your config.exs:
config :sorcery, :event_store,
store: Sorcery.Stores.PostgresStore,
store_opts: [
repo: MyApp.Repo,
table_name: "events"
]Or for in-memory storage:
config :sorcery, :event_store,
store: Sorcery.Stores.MemoryStoreUsage
# Create and store an event
event = Sorcery.Event.new(%{
type: "user_registered",
data: %{user_id: "123"},
domain: "users",
instance_id: "instance_1",
domain_sequence_number: 1
})
Sorcery.EventStore.append(event)
# Retrieve events with pagination
{:ok, events, pagination} = Sorcery.EventStore.get_events()
# Query specific events
{:ok, events, pagination} = Sorcery.EventStore.get_events_by_domain("users")
{:ok, events, pagination} = Sorcery.EventStore.get_events_by_type("user_registered")
Summary
Functions
Appends one or more events to the configured store.
Retrieves events from the configured store.
Get events by domain.
Get events by instance.
Get events by type.
Get events by type in domain.
Get events in time range.
Starts the configured event store.
Returns the configured event store module.
Returns the configured options for the event store.
Subscribes to the event store.
Types
@type query() :: Sorcery.EventStore.Behaviour.query()
Functions
@spec append(Sorcery.Event.t() | [Sorcery.Event.t()]) :: {:ok, [Sorcery.Event.t()]} | {:error, term()}
Appends one or more events to the configured store.
@spec get_events(query() | nil, Keyword.t()) :: {:ok, [Sorcery.Event.t()]} | {:error, term()}
Retrieves events from the configured store.
Query Parameters
:type- Filter by event type:domain- Filter by domain:instance_id- Filter by instance ID:from- Filter events after this timestamp:to- Filter events before this timestamp
Options
:limit- Maximum number of events per page (default: 100):offset- Number of events to skip
Returns {:ok, events, pagination} where pagination includes:
:total_count- Total number of events:page_size- Number of events per page:page_number- Current page number:total_pages- Total number of pages:has_next?- Whether there are more pages:has_prev?- Whether there are previous pages
@spec get_events_by_domain(String.t(), Keyword.t()) :: {:ok, [Sorcery.Event.t()]} | {:error, term()}
Get events by domain.
Options
:limit- Maximum number of events per page (default: 100):offset- Number of events to skip
@spec get_events_by_instance(String.t(), String.t(), Keyword.t()) :: {:ok, [Sorcery.Event.t()]} | {:error, term()}
Get events by instance.
Options
:limit- Maximum number of events per page (default: 100):offset- Number of events to skip
@spec get_events_by_type(String.t(), Keyword.t()) :: {:ok, [Sorcery.Event.t()]} | {:error, term()}
Get events by type.
Options
:limit- Maximum number of events per page (default: 100):offset- Number of events to skip
@spec get_events_by_type_in_domain(String.t(), String.t(), Keyword.t()) :: {:ok, [Sorcery.Event.t()]} | {:error, term()}
Get events by type in domain.
Options
:limit- Maximum number of events per page (default: 100):offset- Number of events to skip
@spec get_events_in_range(DateTime.t(), DateTime.t(), Keyword.t()) :: {:ok, [Sorcery.Event.t()]} | {:error, term()}
Get events in time range.
Options
:limit- Maximum number of events per page (default: 100):offset- Number of events to skip
@spec start_link(Keyword.t()) :: GenServer.on_start()
Starts the configured event store.
@spec store() :: module()
Returns the configured event store module.
@spec store_opts() :: Keyword.t()
Returns the configured options for the event store.
@spec subscribe() :: :ok
Subscribes to the event store.