View Source Sorcery.EventStore.MemoryStore (Sorcery v0.1.0)
A simple in-memory implementation of the Store behavior. Events are stored in the GenServer's state as a list.
Summary
Functions
Append events to the store.
Returns a specification to start this module under a supervisor.
Filters events based on query parameters. Returns unfiltered events if query is nil or empty.
Get events from the store.
Get events by domain.
Get events by instance.
Get events by type.
Get events by type in domain.
Get events in time range.
Applies pagination to a list of events.
Starts the store with the given options.
Validates a query map.
Types
@type pagination() :: %{ total_count: non_neg_integer(), page_size: pos_integer(), page_number: pos_integer(), total_pages: pos_integer(), has_next?: boolean(), has_prev?: boolean() }
@type query() :: %{ optional(:type) => String.t(), optional(:domain) => String.t(), optional(:instance_id) => String.t(), optional(:from) => DateTime.t(), optional(:to) => DateTime.t() }
Functions
@spec append(Sorcery.Event.t() | [Sorcery.Event.t()]) :: {:ok, [Sorcery.Event.t()]} | {:error, term()}
Append events to the store.
Returns a specification to start this module under a supervisor.
See Supervisor.
@spec filter_events([Sorcery.Event.t()], query() | nil) :: [Sorcery.Event.t()]
Filters events based on query parameters. Returns unfiltered events if query is nil or empty.
@spec get_events(query() | nil, Keyword.t()) :: {:ok, [Sorcery.Event.t()], pagination()} | {:error, term()}
Get events from the store.
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 to return: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 to return: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 to return: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 to return: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 to return:offset- Number of events to skip
@spec paginate([Sorcery.Event.t()], Keyword.t()) :: {[Sorcery.Event.t()], pagination()}
Applies pagination to a list of events.
@spec start_link(Keyword.t()) :: GenServer.on_start()
Starts the store with the given options.
Validates a query map.