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)