Safe Haskell | None |
---|---|
Language | Haskell2010 |
- data ProjectionCache key orderKey serialized m = ProjectionCache {
- storeProjectionSnapshot :: key -> orderKey -> serialized -> m ()
- loadProjectionSnapshot :: key -> m (Maybe (orderKey, serialized))
- type StreamProjectionCache serialized m = ProjectionCache UUID EventVersion serialized m
- type GloballyOrderedProjectionCache key serialized m = ProjectionCache key SequenceNumber serialized m
- runProjectionCacheUsing :: (Monad m, Monad mstore) => (forall a. mstore a -> m a) -> ProjectionCache key orderKey serialized mstore -> ProjectionCache key orderKey serialized m
- serializedProjectionCache :: Monad m => Serializer state serialized -> ProjectionCache key orderKey serialized m -> ProjectionCache key orderKey state m
- getLatestProjectionWithCache :: Monad m => EventStore event m -> StreamProjectionCache state m -> StreamProjection state event -> m (StreamProjection state event)
- getLatestGlobalProjectionWithCache :: Monad m => GloballyOrderedEventStore event m -> GloballyOrderedProjectionCache key state m -> GloballyOrderedProjection state event -> key -> m (GloballyOrderedProjection state event)
- updateProjectionCache :: Monad m => EventStore event m -> StreamProjectionCache state m -> StreamProjection state event -> m ()
- updateGlobalProjectionCache :: Monad m => GloballyOrderedEventStore event m -> GloballyOrderedProjectionCache key state m -> GloballyOrderedProjection state event -> key -> m ()
Documentation
data ProjectionCache key orderKey serialized m Source #
A ProjectionCache
caches snapshots of Projection
s in event streams.
This is useful if your event streams are very large. This cache operates on
some Monad
m
and stores the Projection
state of type serialized
.
At its core, this is essentially just a key-value store with knowledge of
the stream UUID
and EventVersion
. It is recommended to use the other
helper functions in this module to interpret the stored values using a
Projection
.
The key
and orderKey
type parameters are polymorphic so we can abstract
over a cache for individual event streams, and a cache for globally ordered
streams.
ProjectionCache | |
|
type StreamProjectionCache serialized m = ProjectionCache UUID EventVersion serialized m Source #
Type synonym for a ProjectionCache
used on individual event streams.
type GloballyOrderedProjectionCache key serialized m = ProjectionCache key SequenceNumber serialized m Source #
Type synonym for a ProjectionCache
that is used in conjunction with a
GloballyOrderedEventStore
.
runProjectionCacheUsing :: (Monad m, Monad mstore) => (forall a. mstore a -> m a) -> ProjectionCache key orderKey serialized mstore -> ProjectionCache key orderKey serialized m Source #
Changes the monad a ProjectionCache
runs in. This is useful to run the
cache in another Monad
while forgetting the original Monad
.
serializedProjectionCache :: Monad m => Serializer state serialized -> ProjectionCache key orderKey serialized m -> ProjectionCache key orderKey state m Source #
Wraps a ProjectionCache
and transparently serializes/deserializes events for
you. Note that in this implementation deserialization errors when using
getEvents
are simply ignored (the event is not returned).
getLatestProjectionWithCache :: Monad m => EventStore event m -> StreamProjectionCache state m -> StreamProjection state event -> m (StreamProjection state event) Source #
Like getLatestProjection
, but uses a ProjectionCache
if it contains
more recent state.
getLatestGlobalProjectionWithCache :: Monad m => GloballyOrderedEventStore event m -> GloballyOrderedProjectionCache key state m -> GloballyOrderedProjection state event -> key -> m (GloballyOrderedProjection state event) Source #
Like getLatestGlobalProjection
, but uses a ProjectionCache
if it
contains more recent state.
updateProjectionCache :: Monad m => EventStore event m -> StreamProjectionCache state m -> StreamProjection state event -> m () Source #
Loads the latest projection state from the cache/store and stores this value back into the projection cache.
updateGlobalProjectionCache :: Monad m => GloballyOrderedEventStore event m -> GloballyOrderedProjectionCache key state m -> GloballyOrderedProjection state event -> key -> m () Source #
Analog of updateProjectionCache
for a GloballyOrderedProjectionCache
.