module Mensam.Client.Application.MensamClient.Class where import Mensam.API.Aeson import Mensam.API.Aeson.StaticText import Mensam.API.Data.Space import Mensam.API.Data.Space.Permission import Mensam.API.Data.User import Mensam.API.Route.Api qualified as Route.Api import Mensam.API.Route.Api.OpenApi qualified as Route.Api.OpenApi import Mensam.API.Route.Api.Reservation qualified as Route.Api.Reservation import Mensam.API.Route.Api.Space qualified as Route.Api.Space import Mensam.API.Route.Api.User qualified as Route.Api.User import Mensam.Client.OrphanInstances import Control.Monad.Trans import Control.Monad.Trans.Compose import Control.Monad.Trans.Elevator import Data.Kind import Data.OpenApi qualified import Data.Proxy import Servant.API import Servant.API.ImageJpeg import Servant.Auth qualified import Servant.Auth.JWT.WithSession qualified as Servant.Auth import Servant.Client import Servant.RawM.Client () type MonadMensamClient :: (Type -> Type) -> Constraint class Monad m => MonadMensamClient m where mensamCall :: ClientM a -> m (Either ClientError a) instance ( Monad (t m) , MonadTrans t , MonadMensamClient m ) => MonadMensamClient (Elevator t m) where mensamCall :: forall a. ClientM a -> Elevator t m (Either ClientError a) mensamCall = m (Either ClientError a) -> Elevator t m (Either ClientError a) forall (m :: * -> *) a. Monad m => m a -> Elevator t m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m (Either ClientError a) -> Elevator t m (Either ClientError a)) -> (ClientM a -> m (Either ClientError a)) -> ClientM a -> Elevator t m (Either ClientError a) forall b c a. (b -> c) -> (a -> b) -> a -> c . ClientM a -> m (Either ClientError a) forall a. ClientM a -> m (Either ClientError a) forall (m :: * -> *) a. MonadMensamClient m => ClientM a -> m (Either ClientError a) mensamCall deriving via Elevator t1 ((t2 :: (Type -> Type) -> Type -> Type) m) instance {-# OVERLAPPABLE #-} ( Monad (t1 (t2 m)) , MonadTrans t1 , MonadMensamClient (t2 m) ) => MonadMensamClient (ComposeT t1 t2 m) endpointOpenApi :: ClientM Data.OpenApi.OpenApi endpointLogin :: AuthData '[Servant.Auth.BasicAuth, Servant.Auth.JWTWithSession] -> ClientM ( Union '[ WithStatus 200 Route.Api.User.ResponseLogin , WithStatus 401 ErrorBasicAuth , WithStatus 500 () ] ) endpointLogout :: AuthData '[Servant.Auth.JWTWithSession] -> ClientM ( Union '[ WithStatus 200 Route.Api.User.ResponseLogout , WithStatus 401 ErrorBearerAuth , WithStatus 500 () ] ) endpointRegister :: Route.Api.User.RequestRegister -> ClientM ( Union '[ WithStatus 201 Route.Api.User.ResponseRegister , WithStatus 400 ErrorParseBodyJson , WithStatus 409 (StaticText "Username is taken.") , WithStatus 500 () ] ) endpointPasswordChange :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.User.RequestPasswordChange -> ClientM ( Union '[ WithStatus 200 Route.Api.User.ResponsePasswordChange , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 500 () ] ) endpointUserPictureUpload :: AuthData '[Servant.Auth.JWTWithSession] -> ImageJpegBytes -> ClientM ( Union '[ WithStatus 200 (StaticText "Uploaded profile picture.") , WithStatus 400 ErrorParseBodyJpeg , WithStatus 401 ErrorBearerAuth , WithStatus 500 () ] ) endpointUserPictureDelete :: AuthData '[Servant.Auth.JWTWithSession] -> ClientM ( Union '[ WithStatus 200 (StaticText "Deleted profile picture.") , WithStatus 401 ErrorBearerAuth , WithStatus 500 () ] ) endpointUserPictureDownload :: AuthData '[Servant.Auth.JWTWithSession] -> IdentifierUser -> ClientM ImageJpegBytes endpointConfirmationRequest :: AuthData '[Servant.Auth.JWTWithSession] -> ClientM ( Union '[ WithStatus 200 Route.Api.User.ResponseConfirmationRequest , WithStatus 401 ErrorBearerAuth , WithStatus 500 () ] ) endpointConfirm :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.User.RequestConfirm -> ClientM ( Union '[ WithStatus 200 Route.Api.User.ResponseConfirm , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 410 () , WithStatus 500 () ] ) endpointNotificationPreferences :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.User.RequestNotifications -> ClientM ( Union '[ WithStatus 200 Route.Api.User.ResponseNotifications , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 403 (StaticText "Email address is not verified.") , WithStatus 500 () ] ) endpointProfile :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.User.RequestProfile -> ClientM ( Union '[ WithStatus 200 Route.Api.User.ResponseProfile , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 404 () , WithStatus 500 () ] ) endpointSpaceCreate :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.Space.RequestSpaceCreate -> ClientM ( Union '[ WithStatus 201 Route.Api.Space.ResponseSpaceCreate , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 500 () ] ) endpointSpaceDelete :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.Space.RequestSpaceDelete -> ClientM ( Union '[ WithStatus 200 Route.Api.Space.ResponseSpaceDelete , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 403 (ErrorInsufficientPermission MkPermissionEditSpace) , WithStatus 404 (StaticText "Space not found.") , WithStatus 500 () ] ) endpointSpaceEdit :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.Space.RequestSpaceEdit -> ClientM ( Union '[ WithStatus 200 Route.Api.Space.ResponseSpaceEdit , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 403 (ErrorInsufficientPermission MkPermissionEditSpace) , WithStatus 404 (StaticText "Space not found.") , WithStatus 500 () ] ) endpointSpacePictureUpload :: AuthData '[Servant.Auth.JWTWithSession] -> IdentifierSpace -> ImageJpegBytes -> ClientM ( Union '[ WithStatus 200 (StaticText "Uploaded space picture.") , WithStatus 400 ErrorParseBodyJpeg , WithStatus 401 ErrorBearerAuth , WithStatus 403 (ErrorInsufficientPermission MkPermissionEditSpace) , WithStatus 404 (StaticText "Space not found.") , WithStatus 500 () ] ) endpointSpacePictureDelete :: AuthData '[Servant.Auth.JWTWithSession] -> IdentifierSpace -> ClientM ( Union '[ WithStatus 200 (StaticText "Deleted space picture.") , WithStatus 401 ErrorBearerAuth , WithStatus 403 (ErrorInsufficientPermission MkPermissionEditSpace) , WithStatus 404 (StaticText "Space not found.") , WithStatus 500 () ] ) endpointSpacePictureDownload :: AuthData '[Servant.Auth.JWTWithSession] -> IdentifierSpace -> ClientM ImageJpegBytes endpointSpaceJoin :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.Space.RequestSpaceJoin -> ClientM ( Union '[ WithStatus 200 Route.Api.Space.ResponseSpaceJoin , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 403 (StaticTexts ["Role is inaccessible.", "Wrong role password."]) , WithStatus 404 (StaticText "Space not found.") , WithStatus 500 () ] ) endpointSpaceLeave :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.Space.RequestSpaceLeave -> ClientM ( Union '[ WithStatus 200 Route.Api.Space.ResponseSpaceLeave , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 403 (StaticText "Owner cannot leave space.") , WithStatus 404 (StaticText "Space not found.") , WithStatus 500 () ] ) endpointSpaceKick :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.Space.RequestSpaceKick -> ClientM ( Union '[ WithStatus 200 Route.Api.Space.ResponseSpaceKick , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 403 (ErrorInsufficientPermission MkPermissionEditUser) , WithStatus 404 (StaticText "Space not found.") , WithStatus 500 () ] ) endpointSpaceUserRole :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.Space.RequestSpaceUserRole -> ClientM ( Union '[ WithStatus 200 Route.Api.Space.ResponseSpaceUserRole , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 403 (ErrorInsufficientPermission MkPermissionEditUser) , WithStatus 404 (StaticText "Space not found.") , WithStatus 500 () ] ) endpointSpaceView :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.Space.RequestSpaceView -> ClientM ( Union '[ WithStatus 200 Route.Api.Space.ResponseSpaceView , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 403 Route.Api.Space.ResponseSpaceView403 , WithStatus 404 (StaticText "Space not found.") , WithStatus 500 () ] ) endpointSpaceList :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.Space.RequestSpaceList -> ClientM ( Union '[ WithStatus 200 Route.Api.Space.ResponseSpaceList , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 500 () ] ) endpointRoleCreate :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.Space.RequestRoleCreate -> ClientM ( Union '[ WithStatus 201 Route.Api.Space.ResponseRoleCreate , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 403 (ErrorInsufficientPermission MkPermissionEditRole) , WithStatus 404 (StaticText "Space not found.") , WithStatus 500 () ] ) endpointRoleEdit :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.Space.RequestRoleEdit -> ClientM ( Union '[ WithStatus 200 Route.Api.Space.ResponseRoleEdit , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 403 (ErrorInsufficientPermission MkPermissionEditRole) , WithStatus 500 () ] ) endpointRoleDelete :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.Space.RequestRoleDelete -> ClientM ( Union '[ WithStatus 200 Route.Api.Space.ResponseRoleDelete , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 403 (ErrorInsufficientPermission MkPermissionEditRole) , WithStatus 500 () ] ) endpointDeskCreate :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.Space.RequestDeskCreate -> ClientM ( Union '[ WithStatus 201 Route.Api.Space.ResponseDeskCreate , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 403 (ErrorInsufficientPermission MkPermissionEditDesk) , WithStatus 404 (StaticText "Space not found.") , WithStatus 500 () ] ) endpointDeskDelete :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.Space.RequestDeskDelete -> ClientM ( Union '[ WithStatus 200 Route.Api.Space.ResponseDeskDelete , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 403 (ErrorInsufficientPermission MkPermissionEditDesk) , WithStatus 404 (StaticText "Desk not found.") , WithStatus 500 () ] ) endpointDeskEdit :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.Space.RequestDeskEdit -> ClientM ( Union '[ WithStatus 200 Route.Api.Space.ResponseDeskEdit , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 403 (ErrorInsufficientPermission MkPermissionEditDesk) , WithStatus 404 (StaticText "Desk not found.") , WithStatus 500 () ] ) endpointDeskList :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.Space.RequestDeskList -> ClientM ( Union '[ WithStatus 200 Route.Api.Space.ResponseDeskList , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 403 (ErrorInsufficientPermission MkPermissionViewSpace) , WithStatus 404 (StaticText "Space not found.") , WithStatus 500 () ] ) endpointReservationCreate :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.Reservation.RequestReservationCreate -> ClientM ( Union '[ WithStatus 201 Route.Api.Reservation.ResponseReservationCreate , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 403 (ErrorInsufficientPermission MkPermissionCreateReservation) , WithStatus 409 (StaticText "Desk is not available within the given time window.") , WithStatus 500 () ] ) endpointReservationCancel :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.Reservation.RequestReservationCancel -> ClientM ( Union '[ WithStatus 200 Route.Api.Reservation.ResponseReservationCancel , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 403 (ErrorInsufficientPermission MkPermissionCancelReservation) , WithStatus 409 (StaticText "Already cancelled.") , WithStatus 410 (StaticText "Already happened.") , WithStatus 500 () ] ) endpointReservationList :: AuthData '[Servant.Auth.JWTWithSession] -> Route.Api.Reservation.RequestReservationList -> ClientM ( Union [ WithStatus 200 Route.Api.Reservation.ResponseReservationList , WithStatus 400 ErrorParseBodyJson , WithStatus 401 ErrorBearerAuth , WithStatus 500 () ] ) Route.Api.Routes { routeOpenApi :: forall route. Routes route -> route :- NamedRoutes Routes Route.Api.routeOpenApi = Route.Api.OpenApi.Routes { routeJson :: forall route. Routes route -> route :- (Summary "OpenAPI" :> (Description "This OpenAPI specification is automatically generated from a servant API.\n" :> ("openapi" :> Get '[JSON] OpenApi))) Route.Api.OpenApi.routeJson = AsClientT ClientM :- (Summary "OpenAPI" :> (Description "This OpenAPI specification is automatically generated from a servant API.\n" :> ("openapi" :> Get '[JSON] OpenApi))) ClientM OpenApi endpointOpenApi } , routeUser :: forall route. Routes route -> route :- NamedRoutes Routes Route.Api.routeUser = Route.Api.User.Routes { routeLogin :: forall route. Routes route -> route :- (Summary "Login" :> (Description "Login to your user account.\n" :> ("login" :> (Auth '[BasicAuth, JWTWithSession] UserAuthenticated :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseLogin, WithStatus 401 ErrorBasicAuth, WithStatus 500 ()])))) Route.Api.User.routeLogin = AsClientT ClientM :- (Summary "Login" :> (Description "Login to your user account.\n" :> ("login" :> (Auth '[BasicAuth, JWTWithSession] UserAuthenticated :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseLogin, WithStatus 401 ErrorBasicAuth, WithStatus 500 ()])))) AuthData '[BasicAuth, JWTWithSession] -> ClientM (Union '[WithStatus 200 ResponseLogin, WithStatus 401 ErrorBasicAuth, WithStatus 500 ()]) endpointLogin , routeLogout :: forall route. Routes route -> route :- (Summary "Logout" :> (Description "Logout from a user session.\nThe token used with this request will be invalidated.\n" :> ("logout" :> (Auth '[JWTWithSession] UserAuthenticated :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseLogout, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()])))) Route.Api.User.routeLogout = AsClientT ClientM :- (Summary "Logout" :> (Description "Logout from a user session.\nThe token used with this request will be invalidated.\n" :> ("logout" :> (Auth '[JWTWithSession] UserAuthenticated :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseLogout, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()])))) AuthData '[JWTWithSession] -> ClientM (Union '[WithStatus 200 ResponseLogout, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()]) endpointLogout , routeRegister :: forall route. Routes route -> route :- (Summary "Register" :> (Description "Register a new user account.\nA confirmation email will be sent to the given email address.\n" :> ("register" :> (ReqBody' '[Lenient, Required] '[JSON] RequestRegister :> UVerb 'POST '[JSON] '[WithStatus 201 ResponseRegister, WithStatus 400 ErrorParseBodyJson, WithStatus 409 (StaticText "Username is taken."), WithStatus 500 ()])))) Route.Api.User.routeRegister = AsClientT ClientM :- (Summary "Register" :> (Description "Register a new user account.\nA confirmation email will be sent to the given email address.\n" :> ("register" :> (ReqBody' '[Lenient, Required] '[JSON] RequestRegister :> UVerb 'POST '[JSON] '[WithStatus 201 ResponseRegister, WithStatus 400 ErrorParseBodyJson, WithStatus 409 (StaticText "Username is taken."), WithStatus 500 ()])))) RequestRegister -> ClientM (Union '[WithStatus 201 ResponseRegister, WithStatus 400 ErrorParseBodyJson, WithStatus 409 (StaticText "Username is taken."), WithStatus 500 ()]) endpointRegister , routePasswordChange :: forall route. Routes route -> route :- (Summary "Change Password" :> (Description "Set a new password for your user account.\n" :> ("password" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestPasswordChange :> UVerb 'PATCH '[JSON] '[WithStatus 200 ResponsePasswordChange, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()]))))) Route.Api.User.routePasswordChange = AsClientT ClientM :- (Summary "Change Password" :> (Description "Set a new password for your user account.\n" :> ("password" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestPasswordChange :> UVerb 'PATCH '[JSON] '[WithStatus 200 ResponsePasswordChange, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()]))))) AuthData '[JWTWithSession] -> RequestPasswordChange -> ClientM (Union '[WithStatus 200 ResponsePasswordChange, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()]) endpointPasswordChange , routePictureUpload :: forall route. Routes route -> route :- (Summary "Change Profile Picture" :> (Description "Upload a new profile picture.\nThis overwrites any old profile picture.\n" :> ("picture" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[ImageJpeg] ImageJpegBytes :> UVerb 'PUT '[JSON] '[WithStatus 200 (StaticText "Uploaded profile picture."), WithStatus 400 ErrorParseBodyJpeg, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()]))))) Route.Api.User.routePictureUpload = AsClientT ClientM :- (Summary "Change Profile Picture" :> (Description "Upload a new profile picture.\nThis overwrites any old profile picture.\n" :> ("picture" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[ImageJpeg] ImageJpegBytes :> UVerb 'PUT '[JSON] '[WithStatus 200 (StaticText "Uploaded profile picture."), WithStatus 400 ErrorParseBodyJpeg, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()]))))) AuthData '[JWTWithSession] -> ImageJpegBytes -> ClientM (Union '[WithStatus 200 (StaticText "Uploaded profile picture."), WithStatus 400 ErrorParseBodyJpeg, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()]) endpointUserPictureUpload , routePictureDelete :: forall route. Routes route -> route :- (Summary "Delete Profile Picture" :> (Description "Delete your current profile picture.\n" :> ("picture" :> (Auth '[JWTWithSession] UserAuthenticated :> UVerb 'DELETE '[JSON] '[WithStatus 200 (StaticText "Deleted profile picture."), WithStatus 401 ErrorBearerAuth, WithStatus 500 ()])))) Route.Api.User.routePictureDelete = AsClientT ClientM :- (Summary "Delete Profile Picture" :> (Description "Delete your current profile picture.\n" :> ("picture" :> (Auth '[JWTWithSession] UserAuthenticated :> UVerb 'DELETE '[JSON] '[WithStatus 200 (StaticText "Deleted profile picture."), WithStatus 401 ErrorBearerAuth, WithStatus 500 ()])))) AuthData '[JWTWithSession] -> ClientM (Union '[WithStatus 200 (StaticText "Deleted profile picture."), WithStatus 401 ErrorBearerAuth, WithStatus 500 ()]) endpointUserPictureDelete , routePictureDownload :: forall route. Routes route -> route :- (Summary "View Profile Picture" :> (Description "View a profile picture.\n" :> ("picture" :> (Auth '[JWTWithSession] UserAuthenticated :> (QueryParam' '[Lenient, Required] "user" IdentifierUser :> Get '[ImageJpeg] ImageJpegBytes))))) Route.Api.User.routePictureDownload = AsClientT ClientM :- (Summary "View Profile Picture" :> (Description "View a profile picture.\n" :> ("picture" :> (Auth '[JWTWithSession] UserAuthenticated :> (QueryParam' '[Lenient, Required] "user" IdentifierUser :> Get '[ImageJpeg] ImageJpegBytes))))) AuthData '[JWTWithSession] -> IdentifierUser -> ClientM ImageJpegBytes endpointUserPictureDownload , routeConfirmationRequest :: forall route. Routes route -> route :- (Summary "Request Email Address Confirmation" :> (Description "Send an email to your email address including a link.\nThis email includes a link to verify your email address.\n" :> ("confirmation" :> ("request" :> (Auth '[JWTWithSession] UserAuthenticated :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseConfirmationRequest, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()]))))) Route.Api.User.routeConfirmationRequest = AsClientT ClientM :- (Summary "Request Email Address Confirmation" :> (Description "Send an email to your email address including a link.\nThis email includes a link to verify your email address.\n" :> ("confirmation" :> ("request" :> (Auth '[JWTWithSession] UserAuthenticated :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseConfirmationRequest, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()]))))) AuthData '[JWTWithSession] -> ClientM (Union '[WithStatus 200 ResponseConfirmationRequest, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()]) endpointConfirmationRequest , routeConfirm :: forall route. Routes route -> route :- (Summary "Confirm Email Address" :> (Description "Verify your email address.\n" :> ("confirm" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestConfirm :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseConfirm, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 410 (), WithStatus 500 ()]))))) Route.Api.User.routeConfirm = AsClientT ClientM :- (Summary "Confirm Email Address" :> (Description "Verify your email address.\n" :> ("confirm" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestConfirm :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseConfirm, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 410 (), WithStatus 500 ()]))))) AuthData '[JWTWithSession] -> RequestConfirm -> ClientM (Union '[WithStatus 200 ResponseConfirm, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 410 (), WithStatus 500 ()]) endpointConfirm , routeNotificationPreferences :: forall route. Routes route -> route :- (Summary "Edit Notification Preferences" :> (Description "Edit your notification preferences.\nYou first have to verify your email address to be able edit your notification preferences.\n" :> ("notificationPreferences" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestNotifications :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseNotifications, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (StaticText "Email address is not verified."), WithStatus 500 ()]))))) Route.Api.User.routeNotificationPreferences = AsClientT ClientM :- (Summary "Edit Notification Preferences" :> (Description "Edit your notification preferences.\nYou first have to verify your email address to be able edit your notification preferences.\n" :> ("notificationPreferences" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestNotifications :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseNotifications, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (StaticText "Email address is not verified."), WithStatus 500 ()]))))) AuthData '[JWTWithSession] -> RequestNotifications -> ClientM (Union '[WithStatus 200 ResponseNotifications, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (StaticText "Email address is not verified."), WithStatus 500 ()]) endpointNotificationPreferences , routeProfile :: forall route. Routes route -> route :- (Summary "View User" :> (Description "Request detailed user information.\n" :> ("profile" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestProfile :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseProfile, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 404 (), WithStatus 500 ()]))))) Route.Api.User.routeProfile = AsClientT ClientM :- (Summary "View User" :> (Description "Request detailed user information.\n" :> ("profile" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestProfile :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseProfile, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 404 (), WithStatus 500 ()]))))) AuthData '[JWTWithSession] -> RequestProfile -> ClientM (Union '[WithStatus 200 ResponseProfile, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 404 (), WithStatus 500 ()]) endpointProfile } , routeSpace :: forall route. Routes route -> route :- NamedRoutes Routes Route.Api.routeSpace = Route.Api.Space.Routes { routeSpaceCreate :: forall route. Routes route -> route :- (Summary "Create Space" :> (Description "Create a new space.\nYou will be an administrator of this newly created space.\n" :> ("space" :> ("create" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestSpaceCreate :> UVerb 'PUT '[JSON] '[WithStatus 201 ResponseSpaceCreate, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()])))))) Route.Api.Space.routeSpaceCreate = AsClientT ClientM :- (Summary "Create Space" :> (Description "Create a new space.\nYou will be an administrator of this newly created space.\n" :> ("space" :> ("create" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestSpaceCreate :> UVerb 'PUT '[JSON] '[WithStatus 201 ResponseSpaceCreate, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()])))))) AuthData '[JWTWithSession] -> RequestSpaceCreate -> ClientM (Union '[WithStatus 201 ResponseSpaceCreate, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()]) endpointSpaceCreate , routeSpaceDelete :: forall route. Routes route -> route :- (Summary "Delete Space" :> (Description "Delete a space irreversibly.\nThis also purges data associated with this space including reservations, desks and member roles.\n" :> ("space" :> ("delete" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestSpaceDelete :> UVerb 'DELETE '[JSON] '[WithStatus 200 ResponseSpaceDelete, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditSpace), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()])))))) Route.Api.Space.routeSpaceDelete = AsClientT ClientM :- (Summary "Delete Space" :> (Description "Delete a space irreversibly.\nThis also purges data associated with this space including reservations, desks and member roles.\n" :> ("space" :> ("delete" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestSpaceDelete :> UVerb 'DELETE '[JSON] '[WithStatus 200 ResponseSpaceDelete, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditSpace), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()])))))) AuthData '[JWTWithSession] -> RequestSpaceDelete -> ClientM (Union '[WithStatus 200 ResponseSpaceDelete, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditSpace), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]) endpointSpaceDelete , routeSpaceEdit :: forall route. Routes route -> route :- (Summary "Edit Space" :> (Description "Update the configuration of a space.\n" :> ("space" :> ("edit" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestSpaceEdit :> UVerb 'PATCH '[JSON] '[WithStatus 200 ResponseSpaceEdit, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditSpace), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()])))))) Route.Api.Space.routeSpaceEdit = AsClientT ClientM :- (Summary "Edit Space" :> (Description "Update the configuration of a space.\n" :> ("space" :> ("edit" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestSpaceEdit :> UVerb 'PATCH '[JSON] '[WithStatus 200 ResponseSpaceEdit, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditSpace), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()])))))) AuthData '[JWTWithSession] -> RequestSpaceEdit -> ClientM (Union '[WithStatus 200 ResponseSpaceEdit, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditSpace), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]) endpointSpaceEdit , routePictureUpload :: forall route. Routes route -> route :- (Summary "Change Space Picture" :> (Description "Upload a new space logo.\nThis overwrites any old space logo.\n" :> ("space" :> ("picture" :> (Auth '[JWTWithSession] UserAuthenticated :> (QueryParam' '[Lenient, Required] "space" IdentifierSpace :> (ReqBody' '[Lenient, Required] '[ImageJpeg] ImageJpegBytes :> UVerb 'PUT '[JSON] '[WithStatus 200 (StaticText "Uploaded space picture."), WithStatus 400 ErrorParseBodyJpeg, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditSpace), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]))))))) Route.Api.Space.routePictureUpload = AsClientT ClientM :- (Summary "Change Space Picture" :> (Description "Upload a new space logo.\nThis overwrites any old space logo.\n" :> ("space" :> ("picture" :> (Auth '[JWTWithSession] UserAuthenticated :> (QueryParam' '[Lenient, Required] "space" IdentifierSpace :> (ReqBody' '[Lenient, Required] '[ImageJpeg] ImageJpegBytes :> UVerb 'PUT '[JSON] '[WithStatus 200 (StaticText "Uploaded space picture."), WithStatus 400 ErrorParseBodyJpeg, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditSpace), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]))))))) AuthData '[JWTWithSession] -> IdentifierSpace -> ImageJpegBytes -> ClientM (Union '[WithStatus 200 (StaticText "Uploaded space picture."), WithStatus 400 ErrorParseBodyJpeg, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditSpace), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]) endpointSpacePictureUpload , routePictureDelete :: forall route. Routes route -> route :- (Summary "Delete Space Picture" :> (Description "Delete the current space logo.\n" :> ("space" :> ("picture" :> (Auth '[JWTWithSession] UserAuthenticated :> (QueryParam' '[Lenient, Required] "space" IdentifierSpace :> UVerb 'DELETE '[JSON] '[WithStatus 200 (StaticText "Deleted space picture."), WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditSpace), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()])))))) Route.Api.Space.routePictureDelete = AsClientT ClientM :- (Summary "Delete Space Picture" :> (Description "Delete the current space logo.\n" :> ("space" :> ("picture" :> (Auth '[JWTWithSession] UserAuthenticated :> (QueryParam' '[Lenient, Required] "space" IdentifierSpace :> UVerb 'DELETE '[JSON] '[WithStatus 200 (StaticText "Deleted space picture."), WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditSpace), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()])))))) AuthData '[JWTWithSession] -> IdentifierSpace -> ClientM (Union '[WithStatus 200 (StaticText "Deleted space picture."), WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditSpace), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]) endpointSpacePictureDelete , routePictureDownload :: forall route. Routes route -> route :- (Summary "View Space Picture" :> (Description "View a space logo.\n" :> ("space" :> ("picture" :> (Auth '[JWTWithSession] UserAuthenticated :> (QueryParam' '[Lenient, Required] "space" IdentifierSpace :> Get '[ImageJpeg] ImageJpegBytes)))))) Route.Api.Space.routePictureDownload = AsClientT ClientM :- (Summary "View Space Picture" :> (Description "View a space logo.\n" :> ("space" :> ("picture" :> (Auth '[JWTWithSession] UserAuthenticated :> (QueryParam' '[Lenient, Required] "space" IdentifierSpace :> Get '[ImageJpeg] ImageJpegBytes)))))) AuthData '[JWTWithSession] -> IdentifierSpace -> ClientM ImageJpegBytes endpointSpacePictureDownload , routeSpaceJoin :: forall route. Routes route -> route :- (Summary "Join Space" :> (Description "Become a member of a space.\n" :> ("space" :> ("join" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestSpaceJoin :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseSpaceJoin, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (StaticTexts '["Role is inaccessible.", "Wrong role password."]), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()])))))) Route.Api.Space.routeSpaceJoin = AsClientT ClientM :- (Summary "Join Space" :> (Description "Become a member of a space.\n" :> ("space" :> ("join" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestSpaceJoin :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseSpaceJoin, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (StaticTexts '["Role is inaccessible.", "Wrong role password."]), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()])))))) AuthData '[JWTWithSession] -> RequestSpaceJoin -> ClientM (Union '[WithStatus 200 ResponseSpaceJoin, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (StaticTexts '["Role is inaccessible.", "Wrong role password."]), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]) endpointSpaceJoin , routeSpaceLeave :: forall route. Routes route -> route :- (Summary "Leave Space" :> (Description "Abandon membership of a space.\n" :> ("space" :> ("leave" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestSpaceLeave :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseSpaceLeave, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (StaticText "Owner cannot leave space."), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()])))))) Route.Api.Space.routeSpaceLeave = AsClientT ClientM :- (Summary "Leave Space" :> (Description "Abandon membership of a space.\n" :> ("space" :> ("leave" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestSpaceLeave :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseSpaceLeave, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (StaticText "Owner cannot leave space."), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()])))))) AuthData '[JWTWithSession] -> RequestSpaceLeave -> ClientM (Union '[WithStatus 200 ResponseSpaceLeave, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (StaticText "Owner cannot leave space."), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]) endpointSpaceLeave , routeSpaceKick :: forall route. Routes route -> route :- (Summary "Kick User from Space" :> (Description "Kick a user out of a space.\nYou need the `edit-user` permission for that space to remove users.\n" :> ("space" :> ("kick" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestSpaceKick :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseSpaceKick, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditUser), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()])))))) Route.Api.Space.routeSpaceKick = AsClientT ClientM :- (Summary "Kick User from Space" :> (Description "Kick a user out of a space.\nYou need the `edit-user` permission for that space to remove users.\n" :> ("space" :> ("kick" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestSpaceKick :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseSpaceKick, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditUser), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()])))))) AuthData '[JWTWithSession] -> RequestSpaceKick -> ClientM (Union '[WithStatus 200 ResponseSpaceKick, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditUser), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]) endpointSpaceKick , routeSpaceUserRole :: forall route. Routes route -> route :- (Summary "Set User Role for Space" :> (Description "Give a new role to a user of a space.\nYou need the `edit-user` permission for that space to redefine user roles.\n" :> ("space" :> ("user" :> ("role" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestSpaceUserRole :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseSpaceUserRole, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditUser), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]))))))) Route.Api.Space.routeSpaceUserRole = AsClientT ClientM :- (Summary "Set User Role for Space" :> (Description "Give a new role to a user of a space.\nYou need the `edit-user` permission for that space to redefine user roles.\n" :> ("space" :> ("user" :> ("role" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestSpaceUserRole :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseSpaceUserRole, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditUser), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]))))))) AuthData '[JWTWithSession] -> RequestSpaceUserRole -> ClientM (Union '[WithStatus 200 ResponseSpaceUserRole, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditUser), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]) endpointSpaceUserRole , routeSpaceView :: forall route. Routes route -> route :- (Summary "View Space" :> (Description "View a single space in detail.\n" :> ("space" :> ("view" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestSpaceView :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseSpaceView, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 ResponseSpaceView403, WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()])))))) Route.Api.Space.routeSpaceView = AsClientT ClientM :- (Summary "View Space" :> (Description "View a single space in detail.\n" :> ("space" :> ("view" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestSpaceView :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseSpaceView, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 ResponseSpaceView403, WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()])))))) AuthData '[JWTWithSession] -> RequestSpaceView -> ClientM (Union '[WithStatus 200 ResponseSpaceView, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 ResponseSpaceView403, WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]) endpointSpaceView , routeSpaceList :: forall route. Routes route -> route :- (Summary "List Spaces" :> (Description "List visible spaces.\n" :> ("space" :> ("list" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestSpaceList :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseSpaceList, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()])))))) Route.Api.Space.routeSpaceList = AsClientT ClientM :- (Summary "List Spaces" :> (Description "List visible spaces.\n" :> ("space" :> ("list" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestSpaceList :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseSpaceList, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()])))))) AuthData '[JWTWithSession] -> RequestSpaceList -> ClientM (Union '[WithStatus 200 ResponseSpaceList, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()]) endpointSpaceList , routeRoleCreate :: forall route. Routes route -> route :- (Summary "Create Role" :> (Description "Create a new role.\nThis role will be a way to access the given space.\nYou need the `edit-role` permission for that space to create roles.\n" :> ("role" :> ("create" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestRoleCreate :> UVerb 'PUT '[JSON] '[WithStatus 201 ResponseRoleCreate, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditRole), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()])))))) Route.Api.Space.routeRoleCreate = AsClientT ClientM :- (Summary "Create Role" :> (Description "Create a new role.\nThis role will be a way to access the given space.\nYou need the `edit-role` permission for that space to create roles.\n" :> ("role" :> ("create" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestRoleCreate :> UVerb 'PUT '[JSON] '[WithStatus 201 ResponseRoleCreate, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditRole), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()])))))) AuthData '[JWTWithSession] -> RequestRoleCreate -> ClientM (Union '[WithStatus 201 ResponseRoleCreate, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditRole), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]) endpointRoleCreate , routeRoleEdit :: forall route. Routes route -> route :- (Summary "Edit Role" :> (Description "Update settings of a role.\nYou need the `edit-role` permission for the space to edit roles.\n" :> ("role" :> ("edit" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestRoleEdit :> UVerb 'PATCH '[JSON] '[WithStatus 200 ResponseRoleEdit, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditRole), WithStatus 500 ()])))))) Route.Api.Space.routeRoleEdit = AsClientT ClientM :- (Summary "Edit Role" :> (Description "Update settings of a role.\nYou need the `edit-role` permission for the space to edit roles.\n" :> ("role" :> ("edit" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestRoleEdit :> UVerb 'PATCH '[JSON] '[WithStatus 200 ResponseRoleEdit, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditRole), WithStatus 500 ()])))))) AuthData '[JWTWithSession] -> RequestRoleEdit -> ClientM (Union '[WithStatus 200 ResponseRoleEdit, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditRole), WithStatus 500 ()]) endpointRoleEdit , routeRoleDelete :: forall route. Routes route -> route :- (Summary "Delete Role" :> (Description "Delete a role.\nYou have to provide a fallback role to reassign members to that fallback role.\nYou need the `edit-role` permission for the space to delete roles.\n" :> ("role" :> ("delete" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestRoleDelete :> UVerb 'DELETE '[JSON] '[WithStatus 200 ResponseRoleDelete, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditRole), WithStatus 500 ()])))))) Route.Api.Space.routeRoleDelete = AsClientT ClientM :- (Summary "Delete Role" :> (Description "Delete a role.\nYou have to provide a fallback role to reassign members to that fallback role.\nYou need the `edit-role` permission for the space to delete roles.\n" :> ("role" :> ("delete" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestRoleDelete :> UVerb 'DELETE '[JSON] '[WithStatus 200 ResponseRoleDelete, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditRole), WithStatus 500 ()])))))) AuthData '[JWTWithSession] -> RequestRoleDelete -> ClientM (Union '[WithStatus 200 ResponseRoleDelete, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditRole), WithStatus 500 ()]) endpointRoleDelete , routeDeskCreate :: forall route. Routes route -> route :- (Summary "Create Desk" :> (Description "Create a new desk.\nThis desk will belong to the given space.\nYou need the `edit-desk` permission for that space to create desks.\n" :> ("desk" :> ("create" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestDeskCreate :> UVerb 'PUT '[JSON] '[WithStatus 201 ResponseDeskCreate, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditDesk), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()])))))) Route.Api.Space.routeDeskCreate = AsClientT ClientM :- (Summary "Create Desk" :> (Description "Create a new desk.\nThis desk will belong to the given space.\nYou need the `edit-desk` permission for that space to create desks.\n" :> ("desk" :> ("create" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestDeskCreate :> UVerb 'PUT '[JSON] '[WithStatus 201 ResponseDeskCreate, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditDesk), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()])))))) AuthData '[JWTWithSession] -> RequestDeskCreate -> ClientM (Union '[WithStatus 201 ResponseDeskCreate, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditDesk), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]) endpointDeskCreate , routeDeskDelete :: forall route. Routes route -> route :- (Summary "Delete Desk" :> (Description "Delete a desk.\nYou need the `edit-desk` permission for that space to delete desks.\n" :> ("desk" :> ("delete" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestDeskDelete :> UVerb 'DELETE '[JSON] '[WithStatus 200 ResponseDeskDelete, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditDesk), WithStatus 404 (StaticText "Desk not found."), WithStatus 500 ()])))))) Route.Api.Space.routeDeskDelete = AsClientT ClientM :- (Summary "Delete Desk" :> (Description "Delete a desk.\nYou need the `edit-desk` permission for that space to delete desks.\n" :> ("desk" :> ("delete" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestDeskDelete :> UVerb 'DELETE '[JSON] '[WithStatus 200 ResponseDeskDelete, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditDesk), WithStatus 404 (StaticText "Desk not found."), WithStatus 500 ()])))))) AuthData '[JWTWithSession] -> RequestDeskDelete -> ClientM (Union '[WithStatus 200 ResponseDeskDelete, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditDesk), WithStatus 404 (StaticText "Desk not found."), WithStatus 500 ()]) endpointDeskDelete , routeDeskEdit :: forall route. Routes route -> route :- (Summary "Edit Desk" :> (Description "Update a desk.\nYou need the `edit-desk` permission for that space to edit desks.\n" :> ("desk" :> ("edit" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestDeskEdit :> UVerb 'PATCH '[JSON] '[WithStatus 200 ResponseDeskEdit, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditDesk), WithStatus 404 (StaticText "Desk not found."), WithStatus 500 ()])))))) Route.Api.Space.routeDeskEdit = AsClientT ClientM :- (Summary "Edit Desk" :> (Description "Update a desk.\nYou need the `edit-desk` permission for that space to edit desks.\n" :> ("desk" :> ("edit" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestDeskEdit :> UVerb 'PATCH '[JSON] '[WithStatus 200 ResponseDeskEdit, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditDesk), WithStatus 404 (StaticText "Desk not found."), WithStatus 500 ()])))))) AuthData '[JWTWithSession] -> RequestDeskEdit -> ClientM (Union '[WithStatus 200 ResponseDeskEdit, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditDesk), WithStatus 404 (StaticText "Desk not found."), WithStatus 500 ()]) endpointDeskEdit , routeDeskList :: forall route. Routes route -> route :- (Summary "List Desks" :> (Description "List desks.\nUse the time-window to restrict the reservations in the result to overlapping time frames.\n" :> ("desk" :> ("list" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestDeskList :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseDeskList, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionViewSpace), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()])))))) Route.Api.Space.routeDeskList = AsClientT ClientM :- (Summary "List Desks" :> (Description "List desks.\nUse the time-window to restrict the reservations in the result to overlapping time frames.\n" :> ("desk" :> ("list" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestDeskList :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseDeskList, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionViewSpace), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()])))))) AuthData '[JWTWithSession] -> RequestDeskList -> ClientM (Union '[WithStatus 200 ResponseDeskList, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionViewSpace), WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]) endpointDeskList } , routeReservation :: forall route. Routes route -> route :- ("reservation" :> NamedRoutes Routes) Route.Api.routeReservation = Route.Api.Reservation.Routes { routeReservationCreate :: forall route. Routes route -> route :- (Summary "Create Reservation" :> (Description "Request a desk reservation.\nA desk can only be reserved by one user at any time.\n" :> ("create" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestReservationCreate :> UVerb 'PUT '[JSON] '[WithStatus 201 ResponseReservationCreate, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionCreateReservation), WithStatus 409 (StaticText "Desk is not available within the given time window."), WithStatus 500 ()]))))) Route.Api.Reservation.routeReservationCreate = AsClientT ClientM :- (Summary "Create Reservation" :> (Description "Request a desk reservation.\nA desk can only be reserved by one user at any time.\n" :> ("create" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestReservationCreate :> UVerb 'PUT '[JSON] '[WithStatus 201 ResponseReservationCreate, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionCreateReservation), WithStatus 409 (StaticText "Desk is not available within the given time window."), WithStatus 500 ()]))))) AuthData '[JWTWithSession] -> RequestReservationCreate -> ClientM (Union '[WithStatus 201 ResponseReservationCreate, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionCreateReservation), WithStatus 409 (StaticText "Desk is not available within the given time window."), WithStatus 500 ()]) endpointReservationCreate , routeReservationCancel :: forall route. Routes route -> route :- (Summary "Cancel Reservation" :> (Description "Cancel a desk reservation.\n" :> ("cancel" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestReservationCancel :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseReservationCancel, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionCancelReservation), WithStatus 409 (StaticText "Already cancelled."), WithStatus 410 (StaticText "Already happened."), WithStatus 500 ()]))))) Route.Api.Reservation.routeReservationCancel = AsClientT ClientM :- (Summary "Cancel Reservation" :> (Description "Cancel a desk reservation.\n" :> ("cancel" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestReservationCancel :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseReservationCancel, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionCancelReservation), WithStatus 409 (StaticText "Already cancelled."), WithStatus 410 (StaticText "Already happened."), WithStatus 500 ()]))))) AuthData '[JWTWithSession] -> RequestReservationCancel -> ClientM (Union '[WithStatus 200 ResponseReservationCancel, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 403 (ErrorInsufficientPermission 'MkPermissionCancelReservation), WithStatus 409 (StaticText "Already cancelled."), WithStatus 410 (StaticText "Already happened."), WithStatus 500 ()]) endpointReservationCancel , routeReservationList :: forall route. Routes route -> route :- (Summary "List Reservations" :> (Description "View all of your desk reservations.\nUse the time-window to restrict the result to overlapping reservations.\n" :> ("list" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestReservationList :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseReservationList, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()]))))) Route.Api.Reservation.routeReservationList = AsClientT ClientM :- (Summary "List Reservations" :> (Description "View all of your desk reservations.\nUse the time-window to restrict the result to overlapping reservations.\n" :> ("list" :> (Auth '[JWTWithSession] UserAuthenticated :> (ReqBody' '[Lenient, Required] '[JSON] RequestReservationList :> UVerb 'POST '[JSON] '[WithStatus 200 ResponseReservationList, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()]))))) AuthData '[JWTWithSession] -> RequestReservationList -> ClientM (Union '[WithStatus 200 ResponseReservationList, WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth, WithStatus 500 ()]) endpointReservationList } } = Proxy (NamedRoutes Routes) -> Client ClientM (NamedRoutes Routes) forall api. HasClient ClientM api => Proxy api -> Client ClientM api client (Proxy (NamedRoutes Routes) -> Client ClientM (NamedRoutes Routes)) -> Proxy (NamedRoutes Routes) -> Client ClientM (NamedRoutes Routes) forall a b. (a -> b) -> a -> b $ forall t. Proxy t forall {k} (t :: k). Proxy t Proxy @(NamedRoutes Route.Api.Routes)