Current section

Files

Jump to
eventstore lib event_store recorded_event.ex
Raw

lib/event_store/recorded_event.ex

defmodule EventStore.RecordedEvent do
@moduledoc """
`EventStore.RecordedEvent` contains the persisted data and metadata for a single event.
Events are immutable once recorded.
## Recorded event fields
- `event_id` - a globally unique, monotonically incrementing and gapless integer
- `stream_uuid` - the stream identity for the event
- `stream_version` - the version of the stream for the event
- `correlation_id` - an optional identifier used to correlate related messages
- `causation_id` - an optional identifier used to identify which message you are responding to
- `data` - the serialized event as binary data
- `metadata` - the serialized event metadata as binary data
- `created_at` - the date/time, in UTC, indicating when the event was created
"""
alias EventStore.RecordedEvent
@type t :: %RecordedEvent{
event_id: non_neg_integer,
stream_uuid: String.t,
stream_version: non_neg_integer,
correlation_id: String.t,
causation_id: String.t,
event_type: String.t,
data: binary,
metadata: binary,
created_at: NaiveDateTime.t,
}
defstruct [
event_id: nil,
stream_uuid: nil,
stream_version: nil,
correlation_id: nil,
causation_id: nil,
event_type: nil,
data: nil,
metadata: nil,
created_at: nil,
]
def deserialize(%RecordedEvent{data: data, metadata: metadata, event_type: event_type} = recorded_event, serializer) do
%RecordedEvent{recorded_event |
data: serializer.deserialize(data, type: event_type),
metadata: serializer.deserialize(metadata, [])
}
end
def fetch(map, key) when is_map(map) do
Map.fetch(map, key)
end
def get_and_update(map, key, fun) when is_map(map) do
Map.get_and_update(map, key, fun)
end
end