eventful-core-0.2.0: Core module for eventful

Safe HaskellNone



Defines an Aggregate type-class from DDD parlance.



data Aggregate state event command 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.




allAggregateStates :: Aggregate state event command -> [command] -> [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 => EventStoreWriter m event -> VersionedEventStoreReader m event -> Aggregate state event command -> UUID -> command -> m [event] 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.

serializedAggregate :: Aggregate state event command -> Serializer event serializedEvent -> Serializer command serializedCommand -> Aggregate state serializedEvent serializedCommand Source #

Use a pair of Serializers to wrap a Aggregate with event type event and command type command so it uses the serializedEvent and serializedCommand types.