module Mensam.Server.Server.Route where

import Mensam.API.Route
import Mensam.Server.Application.Configured.Class
import Mensam.Server.Application.Email.Class
import Mensam.Server.Application.Secret.Class
import Mensam.Server.Application.SeldaPool.Class
import Mensam.Server.Server.Route.Api qualified
import Mensam.Server.Server.Route.Frontend qualified
import Mensam.Server.Server.Route.Haddock qualified
import Mensam.Server.Server.Route.OpenApi qualified
import Mensam.Server.Server.Route.Static qualified

import Control.Monad.IO.Unlift
import Control.Monad.Logger.CallStack
import Servant.Server.Generic

routes ::
  (MonadConfigured m, MonadEmail m, MonadLogger m, MonadSecret m, MonadSeldaPool m, MonadUnliftIO m) =>
  Routes (AsServerT m)
routes :: forall (m :: * -> *).
(MonadConfigured m, MonadEmail m, MonadLogger m, MonadSecret m,
 MonadSeldaPool m, MonadUnliftIO m) =>
Routes (AsServerT m)
routes =
  Routes
    { routeApi :: AsServerT m :- ("api" :> NamedRoutes Routes)
routeApi = AsServerT m :- ("api" :> NamedRoutes Routes)
Routes (AsServerT m)
forall (m :: * -> *).
(MonadConfigured m, MonadEmail m, MonadLogger m, MonadSecret m,
 MonadSeldaPool m, MonadUnliftIO m) =>
Routes (AsServerT m)
Mensam.Server.Server.Route.Api.handler
    , routeOpenApi :: AsServerT m :- ("openapi" :> NamedRoutes Routes)
routeOpenApi = AsServerT m :- ("openapi" :> NamedRoutes Routes)
Routes (AsServerT m)
forall (m :: * -> *). MonadConfigured m => Routes (AsServerT m)
Mensam.Server.Server.Route.OpenApi.handler
    , routeStatic :: AsServerT m :- ("static" :> API)
routeStatic = AsServerT m :- ("static" :> API)
ServerT API m
forall (m :: * -> *).
(MonadConfigured m, MonadLogger m, MonadUnliftIO m) =>
ServerT API m
Mensam.Server.Server.Route.Static.handler
    , routeHaddock :: AsServerT m :- ("haddock" :> API)
routeHaddock = AsServerT m :- ("haddock" :> API)
ServerT API m
forall (m :: * -> *).
(MonadConfigured m, MonadLogger m, MonadUnliftIO m) =>
ServerT API m
Mensam.Server.Server.Route.Haddock.handler
    , routeFrontend :: AsServerT m :- API
routeFrontend = AsServerT m :- API
ServerT API m
forall (m :: * -> *).
(MonadConfigured m, MonadLogger m) =>
ServerT API m
Mensam.Server.Server.Route.Frontend.handler
    }