packages feed

cqrs-example-0.4.0: src/Main.hs

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."