1 {-# LANGUAGE TypeFamilies, OverloadedStrings #-}
    2 module Databrary.Model.Notification.Types
    3   ( module Databrary.Model.Notification.Notice
    4   , Notification(..)
    5   , blankNotification
    6   ) where
    7 
    8 import Databrary.Model.Time
    9 import Databrary.Model.Id.Types
   10 import Databrary.Model.Kind
   11 import Databrary.Model.Party
   12 import Databrary.Model.Volume.Types
   13 import Databrary.Model.Container.Types
   14 import Databrary.Model.Segment
   15 import Databrary.Model.Asset.Types
   16 import Databrary.Model.Comment.Types
   17 import Databrary.Model.Tag.Types
   18 import Databrary.Model.Permission.Types
   19 import Databrary.Model.Release.Types
   20 import Databrary.Model.Notification.Notice
   21 
   22 type instance IdType Notification = Int32
   23 
   24 data Notification = Notification
   25   { notificationId :: Id Notification
   26   , notificationTarget :: !Account
   27   , notificationNotice :: !Notice
   28   , notificationTime :: Timestamp
   29   , notificationDelivered :: !Delivery
   30   , notificationAgent :: PartyRow
   31   , notificationParty :: Maybe PartyRow
   32   , notificationVolume :: Maybe VolumeRow
   33   , notificationPermission :: Maybe Permission
   34   , notificationContainerId :: Maybe (Id Container)
   35   , notificationSegment :: Maybe Segment
   36   , notificationAssetId :: Maybe (Id Asset)
   37   , notificationRelease :: Maybe Release
   38   , notificationCommentId :: Maybe (Id Comment)
   39   , notificationTag :: Maybe Tag
   40   }
   41 
   42 instance Kinded Notification where
   43   kindOf _ = "notification"
   44 
   45 blankNotification :: Account -> Notice -> Notification
   46 blankNotification target notice = Notification
   47   { notificationId = error "blankNotification"
   48   , notificationTarget = target
   49   , notificationNotice = notice
   50   , notificationTime = error "blankNotification"
   51   , notificationDelivered = DeliveryNone
   52   , notificationAgent = partyRow nobodyParty
   53   , notificationParty = Nothing
   54   , notificationVolume = Nothing
   55   , notificationPermission = Nothing
   56   , notificationContainerId = Nothing
   57   , notificationSegment = Nothing
   58   , notificationAssetId = Nothing
   59   , notificationRelease = Nothing
   60   , notificationCommentId = Nothing
   61   , notificationTag = Nothing
   62   }