{-# LANGUAGE DuplicateRecordFields #-}

-- | Servant REST API for Arbiter job queue administration.
--
-- Includes endpoints for:
--
-- * Job management (list, get, cancel, promote)
-- * Dead letter queue operations (list, retry, delete)
-- * Queue statistics and monitoring
--
-- = Quick Start
--
-- @
-- import Arbiter.Servant
-- import Data.Proxy (Proxy(..))
--
-- main :: IO ()
-- main = do
--   -- Create server config (creates its own pool and registers event triggers)
--   config <- initArbiterServer (Proxy @MyRegistry) connStr "public"
--
--   -- Start API server on port 8080
--   runArbiterAPI 8080 config
-- @
module Arbiter.Servant
  ( -- * Server
    arbiterServer
  , arbiterApp
  , runArbiterAPI
  , ArbiterServerConfig (..)
  , initArbiterServer
  , BuildServer (..)

    -- * API Types
  , ArbiterAPI
  , RegistryToAPI
  , TableAPI (..)
  , EventsAPI
  , QueuesAPI (..)
  , JobsAPI (..)
  , DLQAPI (..)
  , StatsAPI (..)
  , CronAPI (..)

    -- * Request Types
  , ApiJobWrite (..)

    -- * Response Types
  , QueuesResponse (..)
  , JobResponse (..)
  , JobsResponse (..)
  , DLQResponse (..)
  , StatsResponse (..)
  , CronSchedulesResponse (..)
  , CronScheduleRow (..)
  , CronScheduleUpdate (..)
  ) where

import Arbiter.Servant.API
import Arbiter.Servant.Server
import Arbiter.Servant.Types