summaryrefslogtreecommitdiff
path: root/deps/discord-haskell/src/Discord/Internal/Rest/ScheduledEvents.hs
blob: bb35d12f040b49503ed05ac098ccb58bf1cb145d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
{-# LANGUAGE GADTs #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}

-- | Provides actions for Scheduled Event API
module Discord.Internal.Rest.ScheduledEvents
    ( ScheduledEventRequest(..)
    ) where
import           Data.Aeson                     ( ToJSON(toJSON) )
import           Discord.Internal.Rest.Prelude  ( JsonRequest(..)
                                                , Request
                                                    ( jsonRequest
                                                    , majorRoute
                                                    )
                                                , baseUrl
                                                )
import           Discord.Internal.Types.Prelude ( GuildId
                                                , ScheduledEventId
                                                )
import           Discord.Internal.Types.ScheduledEvents
                                                ( CreateScheduledEventData
                                                , ModifyScheduledEventData
                                                , ScheduledEvent
                                                , ScheduledEventUser
                                                )
import qualified Network.HTTP.Req              as R
import           Network.HTTP.Req               ( (/:), (/~) )

-- | Data constructor for requests.
-- See <https://discord.com/developers/docs/resources/guild-scheduled-event>
data ScheduledEventRequest a where
  -- | Gets all the Scheduled Events of a Guild
  ListScheduledEvents    ::GuildId
                         -> ScheduledEventRequest [ScheduledEvent]
  -- | Creates a new ScheduledEvent
  CreateScheduledEvent   ::GuildId
                         -> CreateScheduledEventData
                         -> ScheduledEventRequest ScheduledEvent
  -- | Gets the information about an Event
  GetScheduledEvent      ::GuildId
                         -> ScheduledEventId
                         -> ScheduledEventRequest ScheduledEvent
  -- | Modifies a Scheduled Event's information
  ModifyScheduledEvent   ::GuildId
                         -> ScheduledEventId
                         -> ModifyScheduledEventData
                         -> ScheduledEventRequest ScheduledEvent
  -- | Delete a ScheduledEvent
  DeleteScheduledEvent   ::GuildId
                         -> ScheduledEventId
                         -> ScheduledEventRequest ()
  -- | Gets the Users that subscribed to the event
  GetScheduledEventUsers ::GuildId
                         -> ScheduledEventId
                         -> ScheduledEventRequest [ScheduledEventUser]

sevEndpoint :: GuildId -> R.Url 'R.Https
sevEndpoint gid = baseUrl /: "guilds" /~ gid /: "scheduled-events"

instance Request (ScheduledEventRequest a) where
    majorRoute = const "scheduledEvent"
    jsonRequest rq = case rq of
        ListScheduledEvents gid  -> Get (sevEndpoint gid) mempty
        GetScheduledEvent gid ev -> Get (sevEndpoint gid /~ ev) mempty
        CreateScheduledEvent gid ev ->
            Post (sevEndpoint gid) (pure $ R.ReqBodyJson $ toJSON ev) mempty
        ModifyScheduledEvent gid evi ev -> Patch
            (sevEndpoint gid /~ evi)
            (pure $ R.ReqBodyJson $ toJSON ev)
            mempty
        DeleteScheduledEvent gid evi -> Delete (sevEndpoint gid /~ evi) mempty
        GetScheduledEventUsers gid evi ->
            Get (sevEndpoint gid /~ evi /: "users") mempty