packages feed

ms-graph-api 0.10.0.0 → 0.11.0.0

raw patch · 3 files changed

+144/−16 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- MSGraphAPI.Users.Group: getGroupsDriveItems :: Text -> AccessToken -> Req (Collection DriveItem)
- MSGraphAPI.Users.Group: getMeJoinedTeams :: AccessToken -> Req (Collection Group)
- MSGraphAPI.Users.Group: getUserJoinedTeams :: Text -> AccessToken -> Req (Collection Group)
+ MSGraphAPI.Users.Group: Channel :: Text -> Text -> Text -> Channel
+ MSGraphAPI.Users.Group: ChatMessage :: ChatMessageBody -> Text -> ZonedTime -> Maybe ZonedTime -> ChatMessage
+ MSGraphAPI.Users.Group: ChatMessageBody :: Text -> ChatMessageBody
+ MSGraphAPI.Users.Group: [chDescription] :: Channel -> Text
+ MSGraphAPI.Users.Group: [chDisplayName] :: Channel -> Text
+ MSGraphAPI.Users.Group: [chId] :: Channel -> Text
+ MSGraphAPI.Users.Group: [chamBody] :: ChatMessage -> ChatMessageBody
+ MSGraphAPI.Users.Group: [chamCreatedDateTime] :: ChatMessage -> ZonedTime
+ MSGraphAPI.Users.Group: [chamDeletedDateTime] :: ChatMessage -> Maybe ZonedTime
+ MSGraphAPI.Users.Group: [chamId] :: ChatMessage -> Text
+ MSGraphAPI.Users.Group: [chambId] :: ChatMessageBody -> Text
+ MSGraphAPI.Users.Group: data Channel
+ MSGraphAPI.Users.Group: data ChatMessage
+ MSGraphAPI.Users.Group: data ChatMessageBody
+ MSGraphAPI.Users.Group: getChannelMessage :: Text -> Text -> Text -> AccessToken -> Req ChatMessage
+ MSGraphAPI.Users.Group: instance Data.Aeson.Types.FromJSON.FromJSON MSGraphAPI.Users.Group.Channel
+ MSGraphAPI.Users.Group: instance Data.Aeson.Types.FromJSON.FromJSON MSGraphAPI.Users.Group.ChatMessage
+ MSGraphAPI.Users.Group: instance Data.Aeson.Types.FromJSON.FromJSON MSGraphAPI.Users.Group.ChatMessageBody
+ MSGraphAPI.Users.Group: instance Data.Aeson.Types.ToJSON.ToJSON MSGraphAPI.Users.Group.Channel
+ MSGraphAPI.Users.Group: instance Data.Aeson.Types.ToJSON.ToJSON MSGraphAPI.Users.Group.ChatMessage
+ MSGraphAPI.Users.Group: instance Data.Aeson.Types.ToJSON.ToJSON MSGraphAPI.Users.Group.ChatMessageBody
+ MSGraphAPI.Users.Group: instance GHC.Classes.Eq MSGraphAPI.Users.Group.Channel
+ MSGraphAPI.Users.Group: instance GHC.Classes.Eq MSGraphAPI.Users.Group.ChatMessageBody
+ MSGraphAPI.Users.Group: instance GHC.Classes.Ord MSGraphAPI.Users.Group.Channel
+ MSGraphAPI.Users.Group: instance GHC.Classes.Ord MSGraphAPI.Users.Group.ChatMessageBody
+ MSGraphAPI.Users.Group: instance GHC.Generics.Generic MSGraphAPI.Users.Group.Channel
+ MSGraphAPI.Users.Group: instance GHC.Generics.Generic MSGraphAPI.Users.Group.ChatMessage
+ MSGraphAPI.Users.Group: instance GHC.Generics.Generic MSGraphAPI.Users.Group.ChatMessageBody
+ MSGraphAPI.Users.Group: instance GHC.Show.Show MSGraphAPI.Users.Group.Channel
+ MSGraphAPI.Users.Group: instance GHC.Show.Show MSGraphAPI.Users.Group.ChatMessage
+ MSGraphAPI.Users.Group: instance GHC.Show.Show MSGraphAPI.Users.Group.ChatMessageBody
+ MSGraphAPI.Users.Group: listChannelMessages :: Text -> Text -> AccessToken -> Req (Collection ChatMessage)
+ MSGraphAPI.Users.Group: listGroupsDriveItems :: Text -> AccessToken -> Req (Collection DriveItem)
+ MSGraphAPI.Users.Group: listMeAssociatedTeams :: AccessToken -> Req (Collection Group)
+ MSGraphAPI.Users.Group: listMeJoinedTeams :: AccessToken -> Req (Collection Group)
+ MSGraphAPI.Users.Group: listMessageReplies :: Text -> Text -> Text -> AccessToken -> Req (Collection ChatMessage)
+ MSGraphAPI.Users.Group: listTeamChannels :: Text -> AccessToken -> Req (Collection Channel)
+ MSGraphAPI.Users.Group: listUserAssociatedTeams :: Text -> AccessToken -> Req (Collection Group)
+ MSGraphAPI.Users.Group: listUserJoinedTeams :: Text -> AccessToken -> Req (Collection Group)

Files

CHANGELOG.md view
@@ -8,15 +8,24 @@  ## Unreleased +## 0.11.0.0 +.Users.Group+- add listTeamChannels+- add listChannelMessages, listMessageReplies++*Breaking changes*+Functions in .Users.Group are now called 'list..' rather than 'get..' to correspond with the REST API++ ## 0.10.0.0  *Breaking changes*-- MSGraphAPI.ChangeNotifications.Subscription : Subscription has fewer fields (the ID and TLS version fields are optional)+- .ChangeNotifications.Subscription : Subscription has fewer fields (the ID and TLS version fields are optional)  ## 0.9.0.0 -MSGraphAPI.Files.Drive+.Files.Drive  *Breaking changes* - withTLS changed signature: the inner continuation has an additional Manager parameter@@ -24,7 +33,7 @@  ## 0.8.0.0 -MSGraphAPI.Files.DriveItem :+.Files.DriveItem : - custom FromJSON instance using a sum type for the various types of drive item. Makes it convenient for users to pattern match on type. So far only File, Folder and Package drive item types are parsed further.  New MSGraphAPI module to re-expose internals@@ -32,7 +41,7 @@  ## 0.7.0.0 -MSGraphAPI.ChangeNotifications.Subscription:+.ChangeNotifications.Subscription: - add createSubscription  *Breaking changes*@@ -40,7 +49,7 @@  ## 0.6.0.0 -MSGraphAPI.Users.Group :+.Users.Group : - Group - getUserJoinedTeams - getGroupsDriveItems
ms-graph-api.cabal view
@@ -1,5 +1,5 @@ name:                ms-graph-api-version:             0.10.0.0+version:             0.11.0.0 synopsis:            Microsoft Graph API description:         Bindings to the Microsoft Graph API homepage:            https://github.com/unfoldml/ms-graph-api
src/MSGraphAPI/Users/Group.hs view
@@ -1,12 +1,32 @@ -- | Users.Group+--+-- A 'Group' is an AAD group, which can be a Microsoft 365 group, or a security group.+--+-- A team in Microsoft Teams is a collection of channel objects. A channel represents a topic, and therefore a logical isolation of discussion, within a team.+--+-- Every team is associated with a Microsoft 365 group. The group has the same ID as the team - for example, @\/groups\/{id}\/team is the same@ as @\/teams\/{id}@. module MSGraphAPI.Users.Group (   -- * Teams-  getUserJoinedTeams-  , getMeJoinedTeams+  -- ** Joined teams+  listUserJoinedTeams+  , listMeJoinedTeams+  -- ** Associated teams+  , listUserAssociatedTeams+  , listMeAssociatedTeams+  -- * Team channels+  , listTeamChannels+  -- ** Channel messages+  , listChannelMessages+  , getChannelMessage+  , listMessageReplies   -- * Drive items-  , getGroupsDriveItems+  , listGroupsDriveItems   -- * types   , Group(..)+  , Channel(..)+  -- ** Chat messages+  , ChatMessage(..)+  , ChatMessageBody(..)                               )where  import GHC.Generics (Generic(..))@@ -18,7 +38,9 @@ -- req import Network.HTTP.Req (Req) -- text-import Data.Text (Text)+import Data.Text (Text, unpack)+-- time+import Data.Time (ZonedTime)  import qualified MSGraphAPI.Internal.Common as MSG (Collection(..), get, aesonOptions) import MSGraphAPI.Files.DriveItem (DriveItem)@@ -35,22 +57,119 @@   parseJSON = A.genericParseJSON (MSG.aesonOptions "g") instance A.ToJSON Group +-- | Teams are made up of channels, which are the conversations you have with your teammates. Each channel is dedicated to a specific topic, department, or project. Channels are where the work actually gets done - where text, audio, and video conversations open to the whole team happen, where files are shared, and where tabs are added.+--+-- https://learn.microsoft.com/en-us/graph/api/resources/channel?view=graph-rest-1.0+data Channel = Channel {+  chId :: Text+  , chDisplayName :: Text+  , chDescription :: Text+                       } deriving (Eq, Ord, Show, Generic)+instance A.FromJSON Channel where+  parseJSON = A.genericParseJSON (MSG.aesonOptions "ch")+instance A.ToJSON Channel++-- | Get the list of channels either in this team or shared with this team (incoming channels).+--+-- @GET \/teams\/{team-id}\/allChannels@+listTeamChannels :: Text -- ^ team ID+                 -> AccessToken -> Req (MSG.Collection Channel)+listTeamChannels tid = MSG.get ["teams", tid, "allChannels"] mempty++++-- | Retrieve the list of messages (without the replies) in a channel of a team.+--+-- To get the replies for a message, call the 'listMessageReplies' or the get message reply API.+--+-- @GET \/teams\/{team-id}\/channels\/{channel-id}\/messages@+listChannelMessages ::+  Text -- ^ team ID+  -> Text -- ^ channel ID+  -> AccessToken -> Req (MSG.Collection ChatMessage)+listChannelMessages tid chid =+  MSG.get ["teams", tid, "channels", chid, "messages"] mempty++-- | Retrieve a single message or a message reply in a channel or a chat.+--+-- @GET \/teams\/{team-id}\/channels\/{channel-id}\/messages\/{message-id}@+getChannelMessage :: Text -- ^ team ID+                  -> Text -- ^ channel ID+                  -> Text -- ^ message ID+                  -> AccessToken -> Req ChatMessage+getChannelMessage tid chid mid =+  MSG.get ["teams", tid, "channels", chid, "messages", mid] mempty++-- | List all the replies to a message in a channel of a team.+--+-- This method lists only the replies of the specified message, if any. To get the message itself, use 'getChannelMessage'.+--+-- GET /teams/{team-id}/channels/{channel-id}/messages/{message-id}/replies+listMessageReplies ::+  Text -- ^ team ID+  -> Text -- ^ channel ID+  -> Text -- ^ message ID+  -> AccessToken -> Req (MSG.Collection ChatMessage)+listMessageReplies tid chid mid =+  MSG.get ["teams", tid, "channels", chid, "messages", mid, "replies"] mempty+++-- | An individual chat message within a channel or chat. The message can be a root message or part of a thread+--+-- https://learn.microsoft.com/en-us/graph/api/resources/chatmessage?view=graph-rest-1.0+data ChatMessage = ChatMessage {+  chamBody :: ChatMessageBody+  , chamId :: Text+  , chamCreatedDateTime :: ZonedTime+  , chamDeletedDateTime :: Maybe ZonedTime+                               } deriving (Show, Generic)+instance A.FromJSON ChatMessage where+  parseJSON = A.genericParseJSON (MSG.aesonOptions "cham")+instance A.ToJSON ChatMessage++data ChatMessageBody = ChatMessageBody {+  chambId :: Text+                                       } deriving (Eq, Ord, Generic)+instance Show ChatMessageBody where+  show = unpack . chambId+instance A.FromJSON ChatMessageBody where+  parseJSON = A.genericParseJSON (MSG.aesonOptions "chamb")+instance A.ToJSON ChatMessageBody++++-- | Get the list of teams in Microsoft Teams that a user is associated with.+--+-- @GET \/users\/{user-id}\/teamwork\/associatedTeams@+--+-- Currently, a user can be associated with a team in two different ways:+--+--  * A user can be a direct member of a team.+--  * A user can be a member of a shared channel that is hosted inside a team.+listUserAssociatedTeams :: Text -- ^ User ID+                       -> AccessToken -> Req (MSG.Collection Group)+listUserAssociatedTeams uid = MSG.get ["users", uid, "teamwork", "associatedTeams"] mempty++-- | Get the teams in Microsoft Teams that the current user is associated with (see 'getUserAssociatedTeams').+listMeAssociatedTeams :: AccessToken -> Req (MSG.Collection Group)+listMeAssociatedTeams = MSG.get ["me", "teamwork", "associatedTeams"] mempty+ -- | Get the teams in Microsoft Teams that the given user is a direct member of. -- -- @GET \/users\/{id | user-principal-name}\/joinedTeams@ -- -- https://learn.microsoft.com/en-us/graph/api/user-list-joinedteams?view=graph-rest-1.0&tabs=http-getUserJoinedTeams :: Text -- ^ User ID+listUserJoinedTeams :: Text -- ^ User ID                    -> AccessToken -> Req (MSG.Collection Group)-getUserJoinedTeams uid = MSG.get ["users", uid, "joinedTeams"] mempty+listUserJoinedTeams uid = MSG.get ["users", uid, "joinedTeams"] mempty  -- | Get the teams in Microsoft Teams that the current user is a direct member of. -- -- @GET \/me\/joinedTeams@ -- -- https://learn.microsoft.com/en-us/graph/api/user-list-joinedteams?view=graph-rest-1.0&tabs=http-getMeJoinedTeams :: AccessToken -> Req (MSG.Collection Group)-getMeJoinedTeams = MSG.get ["me", "joinedTeams"] mempty+listMeJoinedTeams :: AccessToken -> Req (MSG.Collection Group)+listMeJoinedTeams = MSG.get ["me", "joinedTeams"] mempty  -- | Get the 'DriveItem's in the 'Group' storage, starting from the root item --@@ -59,9 +178,9 @@ -- https://learn.microsoft.com/en-us/graph/api/driveitem-list-children?view=graph-rest-1.0&tabs=http -- -- NB : requires @Files.Read.All@, since it tries to access all files a user has access to.-getGroupsDriveItems :: Text -- ^ Group ID+listGroupsDriveItems :: Text -- ^ Group ID                     -> AccessToken -> Req (MSG.Collection DriveItem)-getGroupsDriveItems gid = MSG.get ["groups", gid, "drive", "root", "children"] mempty+listGroupsDriveItems gid = MSG.get ["groups", gid, "drive", "root", "children"] mempty   -- data X = X { xName :: Text } deriving (Eq, Ord, Show, Generic)