eventful-core-0.1.0: Core module for eventful

Safe HaskellNone
LanguageHaskell2010

Eventful.Aggregate

Description

Defines an Aggregate type-class from DDD parlance.

Synopsis

Documentation

data Aggregate state event cmd Source #

An Aggregate is a combination of a Projection and a function to validate commands against that Projection. When using an aggregate in some service, it is common to simply load the latest projection state from the event store and handle the command. If the command is valid then the new events are applied to the projection in the event store.

Constructors

Aggregate 

Fields

allAggregateStates :: Aggregate state event cmd -> [cmd] -> [state] Source #

Given a list commands, produce all of the states the aggregate's projection sees. This is useful for unit testing aggregates.

commandStoredAggregate :: Monad m => EventStore serialized m -> Aggregate state serialized cmd -> UUID -> cmd -> m [serialized] Source #

Loads the latest version of a Projection from the event store and tries to apply the Aggregate command to it. If the command succeeds, then this saves the events back to the store as well.