packages feed

calamity-0.1.5.0: src/Calamity/HTTP/AuditLog.hs

-- | Audit Log endpoints
module Calamity.HTTP.AuditLog
    ( AuditLogRequest(..)
    , GetAuditLogOptions(..) ) where

import           Calamity.HTTP.Internal.Request
import           Calamity.HTTP.Internal.Route
import           Calamity.Internal.AesonThings
import           Calamity.Internal.Utils        ()
import           Calamity.Types.Model.Guild
import           Calamity.Types.Model.User
import           Calamity.Types.Snowflake

import           Data.Aeson
import           Data.Default.Class
import           Data.Function

import           GHC.Generics

import           Network.Wreq

data GetAuditLogOptions = GetAuditLogOptions
  { userID     :: Maybe (Snowflake User)
  , actionType :: Maybe AuditLogAction
  , before     :: Maybe (Snowflake AuditLogEntry)
  , limit      :: Maybe Integer
  }
  deriving ( Show, Generic, Default )
  deriving ( ToJSON ) via CalamityJSON GetAuditLogOptions

data AuditLogRequest a where
  GetAuditLog :: HasID Guild g => g -> AuditLogRequest AuditLog

instance Request (AuditLogRequest a) where
  type Result (AuditLogRequest a) = a

  route (GetAuditLog (getID @Guild -> gid)) = mkRouteBuilder // S "guilds" // ID @Guild // S "audit-logs"
    & giveID gid
    & buildRoute

  action (GetAuditLog _) = getWith