Current section
Files
Jump to
Current section
Files
lib/event.ex
defmodule EventStore.Event do
@derive [Poison.Encoder]
defstruct [
#:author,
:data,
:eventId,
:eventNumber,
:eventType,
#:id,
:isJson,
:isLinkMetaData,
:isMetaData,
:links,
:metadata,
#:positionEventNumber,
#:positionStreamId,
:streamId,
#:summary,
#:title,
:updated,
]
@doc """
Create a new Event. Takes a type as a String, and optional data and metadata
With no data:
iex> event = EventStore.Event.new("MyEvent")
iex> event.eventType
"MyEvent"
iex> event.data
nil
With data:
iex> event = EventStore.Event.new("MyEvent", %{"foo" => "bar"})
iex> event.data
%{"foo" => "bar"}
"""
def new(type, data \\ nil, metadata \\ nil) do
%EventStore.Event{
eventId: EventStore.gen_id!(),
eventType: type,
data: data,
metadata: metadata
}
end
@doc """
Return true if event is a new event (not read from database)
iex> EventStore.Event.new?(%EventStore.Event{})
true
iex> EventStore.Event.new?(%EventStore.Event{eventNumber: 2})
false
"""
def new?(event) do
event.eventNumber == nil
end
@doc """
Get link by relation from event, or nil of no relation by that name
iex> r = %EventStore.Event{
...> links: [%{"uri" => "a", "relation" => "next"}]}
iex> EventStore.Event.get_link(r, "next")
"a"
iex> EventStore.Event.get_link(r, "none")
nil
"""
def get_link(event, relation) do
case Enum.find event.links, &(&1["relation"] == relation) do
nil -> nil
%{"uri" => uri} -> uri
end
end
end