Files
parrhesia/lib/parrhesia/storage/events.ex

26 lines
1.2 KiB
Elixir

defmodule Parrhesia.Storage.Events do
@moduledoc """
Storage callbacks for event persistence and query operations.
"""
@type context :: map()
@type event_id :: binary()
@type event :: map()
@type filter :: map()
@type event_ref :: %{created_at: non_neg_integer(), id: binary()}
@type query_opts :: keyword()
@type count_result :: non_neg_integer() | %{optional(atom()) => term()}
@type reason :: term()
@callback put_event(context(), event()) :: {:ok, event()} | {:error, reason()}
@callback get_event(context(), event_id()) :: {:ok, event() | nil} | {:error, reason()}
@callback query(context(), [filter()], query_opts()) :: {:ok, [event()]} | {:error, reason()}
@callback query_event_refs(context(), [filter()], query_opts()) ::
{:ok, [event_ref()]} | {:error, reason()}
@callback count(context(), [filter()], query_opts()) ::
{:ok, count_result()} | {:error, reason()}
@callback delete_by_request(context(), event()) :: {:ok, non_neg_integer()} | {:error, reason()}
@callback vanish(context(), event()) :: {:ok, non_neg_integer()} | {:error, reason()}
@callback purge_expired(query_opts()) :: {:ok, non_neg_integer()} | {:error, reason()}
end