packages feed

calamity-0.11.0.0: 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.Types.Model.Guild
import Calamity.Types.Model.User
import Calamity.Types.Snowflake
import Data.Default.Class
import Data.Function ((&))

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

instance Default GetAuditLogOptions where
  def = GetAuditLogOptions Nothing Nothing Nothing Nothing

data AuditLogRequest a where
  GetAuditLog :: (HasID Guild g) => g -> GetAuditLogOptions -> 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 _ GetAuditLogOptions {userID, actionType, before, limit}) =
    getWithP
      ( "user_id" =:? (fromSnowflake <$> userID)
          <> "action_type" =:? (fromEnum <$> actionType)
          <> "before" =:? (fromSnowflake <$> before)
          <> "limit" =:? limit
      )