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 in time range.

Applies pagination to a list of events.

Starts the store with the given options.

Validates a query map.

Types

pagination()

@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()
}

query()

@type query() :: %{
  optional(:type) => String.t(),
  optional(:domain) => String.t(),
  optional(:instance_id) => String.t(),
  optional(:from) => DateTime.t(),
  optional(:to) => DateTime.t()
}

Functions

append(events)

@spec append(Sorcery.Event.t() | [Sorcery.Event.t()]) ::
  {:ok, [Sorcery.Event.t()]} | {:error, term()}

Append events to the store.

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

filter_events(events, query)

@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.

get_events(query \\ nil, opts \\ [])

@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

get_events_by_domain(domain, opts \\ [])

@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

get_events_by_instance(domain, instance_id, opts \\ [])

@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

get_events_by_type(type, opts \\ [])

@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

get_events_by_type_in_domain(type, domain, opts \\ [])

@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

get_events_in_range(from, to, opts \\ [])

@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

paginate(events, opts)

@spec paginate([Sorcery.Event.t()], Keyword.t()) ::
  {[Sorcery.Event.t()], pagination()}

Applies pagination to a list of events.

start_link(opts \\ [])

@spec start_link(Keyword.t()) :: GenServer.on_start()

Starts the store with the given options.

validate_query(query)

@spec validate_query(query() | nil) :: :ok | {:error, String.t()}

Validates a query map.