{-# LANGUAGE DeriveGeneric #-}
module ChatWork.Types.My
( MyStatus(..)
, MyTasks
, MyTask(..)
, GetMyTasksParams(..)
) where
import ChatWork.Types.Base (Account, AccountId, Room, TaskStatus)
import ChatWork.Utils (strLength)
import Data.Aeson (FromJSON (..), ToJSON (..),
genericParseJSON, genericToJSON)
import Data.Aeson.Casing (aesonDrop, snakeCase)
import Data.Text (Text)
import GHC.Generics (Generic)
data MyStatus = MyStatus
{ myStatusToUnreadRoomNum :: Int
, myStatusToMentionRoomNum :: Int
, myStatusToMytaskRoomNum :: Int
, myStatusToUnreadNum :: Int
, myStatusToMentionNum :: Int
, myStatusToMytaskNum :: Int
} deriving (Eq, Show, Generic)
instance ToJSON MyStatus where
toJSON = genericToJSON $ aesonDrop (strLength "myStatusTo") snakeCase
instance FromJSON MyStatus where
parseJSON = genericParseJSON $ aesonDrop (strLength "myStatusTo") snakeCase
type MyTasks = [MyTask]
data MyTask = MyTask
{ myTaskToTaskId :: Int
, myTaskToRoom :: Room
, myTaskToAssignedByAccount :: Account
, myTaskToMessageId :: Text
, myTaskToBody :: Text
, myTaskToLimitTime :: Int
, myTaskToStatus :: Text
} deriving (Eq, Show, Generic)
instance ToJSON MyTask where
toJSON = genericToJSON $ aesonDrop (strLength "myTaskTo") snakeCase
instance FromJSON MyTask where
parseJSON = genericParseJSON $ aesonDrop (strLength "myTaskTo") snakeCase
data GetMyTasksParams = GetMyTasksParams
{ getMyTasksAssignedByAccountId :: Maybe AccountId
, getMyTasksStatus :: Maybe TaskStatus
} deriving (Show)