slack-web-1.6.0.0: src/Web/Slack/User.hs
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
-- | @users.*@ methods in the Slack API
module Web.Slack.User
( Profile (..),
User (..),
ListReq (..),
ListRsp (..),
Email (..),
UserRsp (..),
)
where
import Data.Time.Clock.POSIX
import Web.FormUrlEncoded
import Web.HttpApiData
import Web.Slack.Common
import Web.Slack.Pager.Types (PagedRequest (..), PagedResponse (..), ResponseMetadata)
import Web.Slack.Prelude
import Web.Slack.Util
-- | See <https://api.slack.com/types/user>
data Profile = Profile
{ profileAvatarHash :: Maybe Text
, profileStatusText :: Maybe Text
, profileStatusEmoji :: Maybe Text
, profileRealName :: Maybe Text
, profileDisplayName :: Maybe Text
, profileRealNameNormalized :: Maybe Text
, profileDisplayNameNormalized :: Maybe Text
, profileEmail :: Maybe Text
, profileImage_24 :: Text
, profileImage_32 :: Text
, profileImage_48 :: Text
, profileImage_72 :: Text
, profileImage_192 :: Text
, profileImage_512 :: Text
, profileTeam :: Maybe Text
}
deriving stock (Eq, Generic, Show)
$(deriveFromJSON (jsonOpts "profile") ''Profile)
data User = User
{ userId :: UserId
, userName :: Text
, userDeleted :: Bool
, userColor :: Maybe Color
, userProfile :: Maybe Profile
, userIsAdmin :: Maybe Bool
, userIsOwner :: Maybe Bool
, userIsPrimaryOwner :: Maybe Bool
, userIsRestricted :: Maybe Bool
, userIsUltraRestricted :: Maybe Bool
, userUpdated :: POSIXTime
}
deriving stock (Eq, Generic, Show)
$(deriveFromJSON (jsonOpts "user") ''User)
-- | @users.list@ request. See <https://api.slack.com/methods/users.list#args>
--
-- @since 1.6.0.0
data ListReq = ListReq
{ listReqCursor :: Maybe Cursor
, listReqLimit :: Maybe Int
, listReqTeamId :: Maybe TeamId
}
deriving stock (Show, Generic, Eq)
deriving anyclass (Default)
instance ToForm ListReq where
toForm (ListReq {listReqCursor, listReqLimit, listReqTeamId}) =
toQueryParamIfJust "cursor" listReqCursor
<> toQueryParamIfJust "limit" listReqLimit
<> toQueryParamIfJust "team_id" listReqTeamId
instance PagedRequest ListReq where
setCursor c r = r {listReqCursor = c}
-- | Response to <https://api.slack.com/methods/users.list>
data ListRsp = ListRsp
{ listRspMembers :: [User]
, listRspResponseMetadata :: Maybe ResponseMetadata
}
deriving stock (Eq, Generic, Show)
$(deriveFromJSON (jsonOpts "listRsp") ''ListRsp)
instance PagedResponse ListRsp where
type ResponseObject ListRsp = User
getResponseData = listRspMembers
getResponseMetadata = listRspResponseMetadata
data UserRsp = UserRsp
{ userRspUser :: User
}
deriving stock (Eq, Generic, Show)
$(deriveFromJSON (jsonOpts "UserRsp") ''UserRsp)
newtype Email = Email Text deriving stock (Eq, Generic, Show)
instance ToForm Email where
toForm (Email txt) = [("email", toQueryParam txt)]