packages feed

cqrs-example-0.8.0: src/CQRSExample/Events.hs

module CQRSExample.Events
       ( Event(..)
       , ProjectEvent(..)
       , SiteEvent(..)
       , TaskEvent(..)
       , UserEvent(..)
       ) where

import           CQRSExample.Aggregates
import           CQRSExample.Duration (Duration)
import           Data.CQRS (GUID)
import           Data.SafeCopy (base, deriveSafeCopySimple)
import           Data.Text (Text)
import           Data.Time (UTCTime)
import           Data.Time.Calendar (Day)
import           Data.Typeable (Typeable)

data Event = ProjectEvent ProjectEvent
           | TaskEvent TaskEvent
           | UserEvent UserEvent
           | SiteEvent SiteEvent
           deriving (Typeable, Show)

data ProjectEvent = ProjectCreated Text Text
                  | ProjectRenamed Text
                    deriving (Typeable, Show)

data TaskEvent = TaskAdded ProjectId Text Duration UserId UTCTime
               | TaskStarred UserId
               | TaskUnstarred UserId
               | RecordedWorkUnit GUID Day Duration Text UserId
               deriving (Typeable, Show)

data UserEvent = UserCreated Text Text Text Text
               deriving (Typeable, Show)

data SiteEvent = UserRegistered Text
               deriving (Typeable, Show)

-- SafeCopy instances. It is extremely important that compatibility is preserved
-- as detailed in the SafeCopy documentation.

$(deriveSafeCopySimple 1 'base ''ProjectEvent)
$(deriveSafeCopySimple 1 'base ''TaskEvent)
$(deriveSafeCopySimple 1 'base ''UserEvent)
$(deriveSafeCopySimple 1 'base ''SiteEvent)
$(deriveSafeCopySimple 1 'base ''Event)