Current section

Files

Jump to
eventsourcing src eventsourcing.erl
Raw

src/eventsourcing.erl

-module(eventsourcing).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([new/2, execute_with_metadata/4, execute/3, add_query/2, load_events/2, load_aggregate/2]).
-export_type([aggregate/4, aggregate_context/4, event_envelop/1, event_sourcing_error/1, event_sourcing/6, event_store/5]).
-type aggregate(OFB, OFC, OFD, OFE) :: {aggregate,
OFB,
fun((OFB, OFC) -> {ok, list(OFD)} | {error, OFE}),
fun((OFB, OFD) -> OFB)}.
-type aggregate_context(OFF, OFG, OFH, OFI) :: {aggregate_context,
binary(),
aggregate(OFF, OFG, OFH, OFI),
integer()}.
-type event_envelop(OFJ) :: {memory_store_event_envelop,
binary(),
integer(),
OFJ,
list({binary(), binary()})} |
{serialized_event_envelop,
binary(),
integer(),
OFJ,
list({binary(), binary()}),
binary(),
binary(),
binary()}.
-type event_sourcing_error(OFK) :: {domain_error, OFK} |
implementation_error |
entity_not_found.
-opaque event_sourcing(OFL, OFM, OFN, OFO, OFP, OFQ) :: {event_sourcing,
event_store(OFL, OFM, OFN, OFO, OFP),
list(fun((binary(), list(event_envelop(OFO))) -> nil))} |
{gleam_phantom, OFQ}.
-type event_store(OFR, OFS, OFT, OFU, OFV) :: {event_store,
OFR,
fun((OFR, binary()) -> aggregate_context(OFS, OFT, OFU, OFV)),
fun((OFR, binary()) -> list(event_envelop(OFU))),
fun((OFR, aggregate_context(OFS, OFT, OFU, OFV), list(OFU), list({binary(),
binary()})) -> list(event_envelop(OFU)))}.
-file("/Users/renata-amutio/Projects/renatillas/eventsourcing/src/eventsourcing.gleam", 105).
-spec new(
event_store(OMY, OMZ, ONA, ONB, ONC),
list(fun((binary(), list(event_envelop(ONB))) -> nil))
) -> event_sourcing(OMY, OMZ, ONA, ONB, ONC, any()).
new(Event_store, Queries) ->
{event_sourcing, Event_store, Queries}.
-file("/Users/renata-amutio/Projects/renatillas/eventsourcing/src/eventsourcing.gleam", 130).
-spec execute_with_metadata(
event_sourcing(any(), any(), OHC, any(), OHE, any()),
binary(),
OHC,
list({binary(), binary()})
) -> {ok, nil} | {error, event_sourcing_error(OHE)}.
execute_with_metadata(Event_sourcing, Aggregate_id, Command, Metadata) ->
Aggregate_context = (erlang:element(3, erlang:element(2, Event_sourcing)))(
erlang:element(2, erlang:element(2, Event_sourcing)),
Aggregate_id
),
Aggregate = erlang:element(3, Aggregate_context),
Entity = erlang:element(2, Aggregate),
gleam@result:'try'(
begin
_pipe = (erlang:element(3, Aggregate))(Entity, Command),
gleam@result:map_error(
_pipe,
fun(Error) -> {domain_error, Error} end
)
end,
fun(Events) ->
_pipe@1 = Events,
gleam@list:map(
_pipe@1,
fun(_capture) ->
(erlang:element(4, Aggregate))(Entity, _capture)
end
),
Commited_events = (erlang:element(
5,
erlang:element(2, Event_sourcing)
))(
erlang:element(2, erlang:element(2, Event_sourcing)),
Aggregate_context,
Events,
Metadata
),
_pipe@2 = erlang:element(3, Event_sourcing),
gleam@list:map(
_pipe@2,
fun(Query) -> Query(Aggregate_id, Commited_events) end
),
{ok, nil}
end
).
-file("/Users/renata-amutio/Projects/renatillas/eventsourcing/src/eventsourcing.gleam", 115).
-spec execute(
event_sourcing(any(), any(), OGN, any(), OGP, any()),
binary(),
OGN
) -> {ok, nil} | {error, event_sourcing_error(OGP)}.
execute(Event_sourcing, Aggregate_id, Command) ->
execute_with_metadata(Event_sourcing, Aggregate_id, Command, []).
-file("/Users/renata-amutio/Projects/renatillas/eventsourcing/src/eventsourcing.gleam", 167).
-spec add_query(
event_sourcing(OHQ, OHR, OHS, OHT, OHU, any()),
fun((binary(), list(event_envelop(OHT))) -> nil)
) -> event_sourcing(OHQ, OHR, OHS, OHT, OHU, any()).
add_query(Eventsourcing, Query) ->
_record = Eventsourcing,
{event_sourcing,
erlang:element(2, _record),
[Query | erlang:element(3, Eventsourcing)]}.
-file("/Users/renata-amutio/Projects/renatillas/eventsourcing/src/eventsourcing.gleam", 181).
-spec load_events(
event_sourcing(any(), any(), any(), OIH, any(), any()),
binary()
) -> list(event_envelop(OIH)).
load_events(Eventsourcing, Aggregate_id) ->
(erlang:element(4, erlang:element(2, Eventsourcing)))(
erlang:element(2, erlang:element(2, Eventsourcing)),
Aggregate_id
).
-file("/Users/renata-amutio/Projects/renatillas/eventsourcing/src/eventsourcing.gleam", 198).
-spec load_aggregate(
event_sourcing(any(), OIT, any(), any(), any(), any()),
binary()
) -> OIT.
load_aggregate(Eventsourcing, Aggregate_id) ->
erlang:element(
2,
erlang:element(
3,
(erlang:element(3, erlang:element(2, Eventsourcing)))(
erlang:element(2, erlang:element(2, Eventsourcing)),
Aggregate_id
)
)
).