Packages
eventstore
0.16.1
1.4.8
1.4.7
1.4.6
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.3
1.2.2
1.2.1
1.2.0
1.1.0
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-rc.0
0.17.0
0.16.2
0.16.1
0.16.0
0.15.1
0.15.0
0.14.0
0.14.0-rc.0
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.0
0.11.0-rc.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.1
0.2.0
0.1.0
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
Event store using PostgreSQL for persistence.
Current section
Files
Jump to
Current section
Files
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_number` - position of the event within the stream. This will be
identical to the `stream_version` when fetching events from a single
stream. For the `$all` stream it will be the globally unique and ordered
event number.
- `event_id` - a globally unique UUID to identify the event.
- `stream_uuid` - the original stream identity for the event.
- `stream_version` - the original version of the stream for the event.
- `correlation_id` - an optional UUID identifier used to correlate related
messages.
- `causation_id` - an optional UUID 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 uuid :: String.t()
@type t :: %__MODULE__{
event_number: non_neg_integer(),
event_id: uuid(),
stream_uuid: String.t(),
stream_version: non_neg_integer(),
correlation_id: uuid() | nil,
causation_id: uuid() | nil,
event_type: String.t(),
data: term,
metadata: binary() | nil,
created_at: NaiveDateTime.t()
}
defstruct [
:event_number,
:event_id,
:stream_uuid,
:stream_version,
:correlation_id,
:causation_id,
:event_type,
:data,
:metadata,
:created_at
]
def deserialize(%RecordedEvent{} = recorded_event, serializer) do
%RecordedEvent{data: data, metadata: metadata, event_type: event_type} = recorded_event
%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