Packages

The official Elixir client SDK for EventSourcingDB – a purpose-built database for event sourcing.

Current section

Files

Jump to
eventsourcingdb lib eventsourcingdb requests write_events.ex
Raw

lib/eventsourcingdb/requests/write_events.ex

defmodule Eventsourcingdb.Requests.WriteEvents do
@moduledoc false
alias Eventsourcingdb.EventCandidate
alias Eventsourcingdb.{OneShotRequest, Endpoint, Event}
use Endpoint
use OneShotRequest
use TypedStruct
# region metadata
method :post
path "/api/v1/write-events"
# region request
# parameters and serialization
@derive Jason.Encoder
typedstruct do
field :events, EventCandidate.t()
field :preconditions, any(), default: []
end
def new(events, preconditions \\ []) do
struct!(__MODULE__, events: events, preconditions: preconditions)
end
# region response
# validation and parsing
def validate_body(payload) do
{:ok, Enum.map(payload, fn ev -> Event.new(ev) end)}
end
end