Helios v0.1.0 Helios.EventJournal behaviour View Source

EventJournal

Config Example

use Mix.Config

config :my_app, MyApp.EventJournal,

adapter: Helios.EventJournal.Adapter.Eventstore
adapter_config: [
  db_type: :node,
  host: "localhost",
  port: 1113,
  username: "admin",
  password: "changeit",
  reconnect_delay: 2_000,
  connection_name: "my_connection_name",
  max_attempts: :infinity
]

Example Code

defmodule MyApp.EventJournal do

use Helios.EventJournal.EventJournal, ot_app: :my_app

end

defmodule MyApp.Events.UserCreated do

defstruct [:id, :email]

end

alias MyApp.EventJournal, as: Journal alias MyApp.Events.UserCreated alias Helios.EventJournal.Messages.EventData

stream = “users-1234” events = [EventData.new(Extreme.Tools.gen_uuid(), MyApp.Events.UserCreated, %UserCreated{id: 1234, email: “example@example.com”})] metadata = %{} expected_version = -2

{:ok, last_event_number} = Journal.append_to_stream(stream, events, expected_version)

Link to this section Summary

Link to this section Types

Link to this type append_error() View Source
append_error() :: :wrong_expected_version | :stream_deleted | :access_denied
Link to this type event_number() View Source
event_number() :: integer()
Link to this type stream_name() View Source
stream_name() :: String.t()

Link to this section Functions

Link to this function compile_config(repo, otp_app) View Source

Link to this section Callbacks

Link to this callback append_to_stream(stream, events, expexted_version) View Source
append_to_stream(
  stream :: stream_name(),
  events :: [struct()],
  expexted_version :: event_number()
) :: {:ok, event_number()} | {:error, append_error()}

Append events to stream if given expected version matches to last written event in journals database

Link to this callback delete_stream(stream, expected_version, hard_delete?) View Source
delete_stream(
  stream :: String.t(),
  expected_version :: integer(),
  hard_delete? :: boolean()
) ::
  {:ok, Helios.EventJournal.Messages.Position.t()}
  | {:error, :wrong_expected_version}
  | {:error, :stream_deleted}
  | {:error, :access_denied}
  | {:error, any()}
Link to this callback get_stream_metadata(stream) View Source
get_stream_metadata(stream :: String.t()) ::
  {:ok, Helios.EventJournal.Messages.StreamMetadataResponse.t()}
  | {:error, :stream_deleted}
  | {:error, :no_stream}
  | {:error, :not_found}
  | {:error, any()}
Link to this callback read_all_events_backward(position, max_events, resolve_links) View Source
read_all_events_backward(
  position :: {integer(), integer()},
  max_events :: integer(),
  resolve_links :: boolean()
) ::
  {:ok, [Helios.EventJournal.Messages.ReadAllEventsResponse.t()]}
  | {:error, Helios.EventJournal.Messages.ReadAllEventsResponse.read_error()}
Link to this callback read_all_events_forward(position, max_events, resolve_links) View Source
read_all_events_forward(
  position :: {integer(), integer()},
  max_events :: integer(),
  resolve_links :: boolean()
) ::
  {:ok, [Helios.EventJournal.Messages.ReadAllEventsResponse.t()]}
  | {:error, Helios.EventJournal.Messages.ReadAllEventsResponse.read_error()}
Link to this callback read_event(stream, event_number, resolve_links) View Source
read_event(
  stream :: stream_name(),
  event_number :: event_number(),
  resolve_links :: boolean()
) ::
  {:ok, Helios.EventJournal.Messages.PersistedEvent.t()}
  | {:error, Helios.EventJournal.Messages.PersistedEvent.read_error()}

Reads single event from stream

Link to this callback read_stream_events_backward(stream, event_number, max_events, resolve_links) View Source
read_stream_events_backward(
  stream :: stream_name(),
  event_number :: event_number(),
  max_events :: integer(),
  resolve_links :: boolean()
) ::
  {:ok, [Helios.EventJournal.Messages.ReadStreamEventsResponse.t()]}
  | {:error, Helios.EventJournal.Messages.ReadStreamEventsResponse.read_error()}

Reads max_events events from journal from given position backward until max_events or begining of stream is reached

Link to this callback read_stream_events_forward(stream, event_number, max_events, resolve_links) View Source
read_stream_events_forward(
  stream :: stream_name(),
  event_number :: event_number(),
  max_events :: integer(),
  resolve_links :: boolean()
) ::
  {:ok, [Helios.EventJournal.Messages.ReadStreamEventsResponse.t()]}
  | {:error, Helios.EventJournal.Messages.ReadStreamEventsResponse.read_error()}

Reads forward max_events events from journal from given position

Link to this callback set_stream_metadata(stream, expected_version, metadata) View Source
set_stream_metadata(
  stream :: String.t(),
  expected_version :: event_number(),
  metadata :: map()
) ::
  {:ok, event_number()}
  | {:error, :stream_deleted}
  | {:error, :no_stream}
  | {:error, :not_found}
  | {:error, :access_denied}
  | {:ettot, any()}