module Eventful.Store.Queries
( EventStoreQueryRange (..)
, EventStoreQueryStart (..)
, EventStoreQueryLimit (..)
, allEvents
, eventsUntil
, eventsStartingAt
, eventsStartingAtUntil
, eventsStartingAtTakeLimit
) where
data EventStoreQueryRange a
= EventStoreQueryRange
{ eventStoreQueryRangeStart :: EventStoreQueryStart a
, eventStoreQueryRangeLimit :: EventStoreQueryLimit a
} deriving (Functor)
data EventStoreQueryStart a
= StartFromBeginning
| StartQueryAt a
deriving (Show, Eq, Functor)
data EventStoreQueryLimit a
= NoQueryLimit
| MaxNumberOfEvents Int
| StopQueryAt a
deriving (Show, Eq, Functor)
allEvents :: EventStoreQueryRange a
allEvents = EventStoreQueryRange StartFromBeginning NoQueryLimit
eventsUntil :: a -> EventStoreQueryRange a
eventsUntil end = EventStoreQueryRange StartFromBeginning (StopQueryAt end)
eventsStartingAt :: a -> EventStoreQueryRange a
eventsStartingAt start = EventStoreQueryRange (StartQueryAt start) NoQueryLimit
eventsStartingAtUntil :: a -> a -> EventStoreQueryRange a
eventsStartingAtUntil start end = EventStoreQueryRange (StartQueryAt start) (StopQueryAt end)
eventsStartingAtTakeLimit :: a -> Int -> EventStoreQueryRange a
eventsStartingAtTakeLimit start maxNum = EventStoreQueryRange (StartQueryAt start) (MaxNumberOfEvents maxNum)