cqrs-0.2.0: src/Data/CQRS/EventStore.hs
-- | Event store data types.
module Data.CQRS.EventStore
( EventStore(..)
) where
import Data.ByteString (ByteString)
import Data.CQRS.GUID
-- | Event stores are the backend used for reading and storing all the
-- information about recorded events.
data EventStore =
EventStore {
-- | Store a sequence of events for aggregate identified by GUID
-- into the event store, starting at the provided version number.
-- If the version number does not match the expected value, a
-- failure occurs.
storeEvents :: forall a. GUID a -> Int -> [ByteString] -> IO (),
-- | Retrieve the sequence of events associated with the aggregate
-- identified by the given GUID. Only events at or after the given
-- version number are retrieved. The events are returned in
-- increasing order of version number. The version number of the
-- last event is returned as well.
retrieveEvents :: forall a. GUID a -> Int -> IO (Int,[ByteString]),
-- | Read events and pass them to the provided monadic action.
readAllEvents :: Int -> Int -> (ByteString -> IO ()) -> IO (),
-- | Write snapshot for aggregate identified by GUID and
-- the given version number. The version number is NOT checked
-- for validity. If the event store does not support snapshots
-- this function may do nothing.
writeSnapshot :: forall a. GUID a -> (Int,ByteString) -> IO (),
-- | Get latest snapshot of an aggregate identified by GUID.
-- Returns the version number of the snapshot in addition to the
-- data. An event store which does not support snapshots is
-- permitted to return 'Nothing' in all cases.
getLatestSnapshot :: forall a. GUID a -> IO (Maybe (Int,ByteString)),
-- | Run transaction against the event store. The transaction is
-- expected to commit if the supplied IO action runs to completion
-- (i.e. doesn't throw an exception) and to rollback otherwise.
withTransaction :: forall a . IO a -> IO a,
-- | Close the event store.
closeEventStore :: IO ()
}