import Control.Monad.Trans.Class (lift)
import Data.CQRS
import Data.CQRS.EventStore (withEventStore)
import Data.CQRS.EventStore.Sqlite3
import Aggregates
import Events
import Instances ()
sqliteFile :: String
sqliteFile = "example.db"
test1 :: IO ()
test1 =
withEventStore (openSqliteEventStore sqliteFile) $ \eventStore -> do
runTransactionT eventStore $ do
-- Create new project.
projectId :: GUID Project <- lift $ newGUID
(projectRef, _) <- getAggregateRoot projectId
publishEvent projectRef $ CreateProject "my project"
-- Add a couple of tasks
taskId1 :: GUID Task <- lift $ newGUID
(taskRef1, _) <- getAggregateRoot taskId1
publishEvent taskRef1 $ AddTask projectId "tweak knob"
taskId2 :: GUID Task <- lift $ newGUID
(taskRef2, _) <- getAggregateRoot taskId2
publishEvent taskRef2 $ AddTask projectId "pull lever"
main :: IO ()
main = do
putStrLn "Running test1..."
test1
putStrLn "Done."