module Mensam.Client.Debug where

import Mensam.API.Aeson
import Mensam.API.Data.Desk
import Mensam.API.Data.Reservation
import Mensam.API.Data.Space
import Mensam.API.Data.User.Password
import Mensam.API.Data.User.Username
import Mensam.API.Route.Api.Reservation qualified as Route.Reservation
import Mensam.API.Route.Api.Space qualified as Route.Space
import Mensam.API.Route.Api.User qualified as Route.User
import Mensam.Client.Application
import Mensam.Client.Application.MensamClient.Class
import Mensam.Client.OrphanInstances

import Control.Monad.IO.Class
import Control.Monad.Trans.Class
import Data.SOP
import Data.Time qualified as T
import Data.Time.Zones.All qualified as T
import Servant
import Servant.Client
import Text.Email.Parser
import Text.Email.Text

runF :: IO ()
runF :: IO ()
runF = BChan ClientEvent -> ApplicationT IO () -> IO ()
forall (m :: * -> *) a.
MonadIO m =>
BChan ClientEvent -> ApplicationT m a -> m a
runApplicationT BChan ClientEvent
forall a. HasCallStack => a
undefined (ApplicationT IO () -> IO ()) -> ApplicationT IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
  Either ClientError ()
result <- ClientM () -> ApplicationT IO (Either ClientError ())
forall a. ClientM a -> ApplicationT IO (Either ClientError a)
forall (m :: * -> *) a.
MonadMensamClient m =>
ClientM a -> m (Either ClientError a)
mensamCall ClientM ()
f
  IO () -> ApplicationT IO ()
forall (m :: * -> *) a. Monad m => m a -> ApplicationT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ApplicationT IO ()) -> IO () -> ApplicationT IO ()
forall a b. (a -> b) -> a -> b
$ Either ClientError () -> IO ()
forall a. Show a => a -> IO ()
print Either ClientError ()
result

f :: ClientM ()
f :: ClientM ()
f = do
  let
    Username
name :: Username = Text -> Username
MkUsernameUnsafe Text
"maxmustermann7"
    Password
pw :: Password = Text -> Password
MkPasswordUnsafe Text
"pw"
    EmailAddress
email :: EmailAddress = Text -> EmailAddress
fromTextUnsafe Text
"maxmustermann@gmail.com"
    NameSpace
spacename :: NameSpace = Text -> NameSpace
MkNameSpace Text
"solarsystem"

  IO () -> ClientM ()
forall a. IO a -> ClientM a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ClientM ()) -> IO () -> ClientM ()
forall a b. (a -> b) -> a -> b
$ String -> IO ()
putStrLn String
"Register."
  let requestRegister :: RequestRegister
requestRegister =
        Route.User.MkRequestRegister
          { requestRegisterName :: Username
Route.User.requestRegisterName = Username
name
          , requestRegisterPassword :: Password
Route.User.requestRegisterPassword = Password
pw
          , requestRegisterEmail :: EmailAddress
Route.User.requestRegisterEmail = EmailAddress
email
          , requestRegisterEmailVisible :: Bool
Route.User.requestRegisterEmailVisible = Bool
True
          , requestRegisterEmailNotifications :: Bool
Route.User.requestRegisterEmailNotifications = Bool
False
          }
  Union
  '[WithStatus 201 ResponseRegister,
    WithStatus 400 ErrorParseBodyJson,
    WithStatus 409 (StaticText "Username is taken."),
    WithStatus 500 ()]
resultRegister <- RequestRegister
-> ClientM
     (Union
        '[WithStatus 201 ResponseRegister,
          WithStatus 400 ErrorParseBodyJson,
          WithStatus 409 (StaticText "Username is taken."),
          WithStatus 500 ()])
endpointRegister RequestRegister
requestRegister
  IO () -> ClientM ()
forall a. IO a -> ClientM a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ClientM ()) -> IO () -> ClientM ()
forall a b. (a -> b) -> a -> b
$ Union
  '[WithStatus 201 ResponseRegister,
    WithStatus 400 ErrorParseBodyJson,
    WithStatus 409 (StaticText "Username is taken."),
    WithStatus 500 ()]
-> IO ()
forall a. Show a => a -> IO ()
print Union
  '[WithStatus 201 ResponseRegister,
    WithStatus 400 ErrorParseBodyJson,
    WithStatus 409 (StaticText "Username is taken."),
    WithStatus 500 ()]
resultRegister

  IO () -> ClientM ()
forall a. IO a -> ClientM a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ClientM ()) -> IO () -> ClientM ()
forall a b. (a -> b) -> a -> b
$ String -> IO ()
putStrLn String
"Login with BasicAuth."
  let credentials :: Credentials
credentials =
        MkCredentials
          { credentialsUsername :: Text
credentialsUsername = Username -> Text
unUsername Username
name
          , credentialsPassword :: Text
credentialsPassword = Password -> Text
unPassword Password
pw
          }
  Union
  '[WithStatus 200 ResponseLogin, WithStatus 401 ErrorBasicAuth,
    WithStatus 500 ()]
resultLogin <- AuthData '[BasicAuth, JWTWithSession]
-> ClientM
     (Union
        '[WithStatus 200 ResponseLogin, WithStatus 401 ErrorBasicAuth,
          WithStatus 500 ()])
endpointLogin (AuthData '[BasicAuth, JWTWithSession]
 -> ClientM
      (Union
         '[WithStatus 200 ResponseLogin, WithStatus 401 ErrorBasicAuth,
           WithStatus 500 ()]))
-> AuthData '[BasicAuth, JWTWithSession]
-> ClientM
     (Union
        '[WithStatus 200 ResponseLogin, WithStatus 401 ErrorBasicAuth,
          WithStatus 500 ()])
forall a b. (a -> b) -> a -> b
$ Credentials -> AuthData '[BasicAuth, JWTWithSession]
forall (auths :: [*]). Credentials -> AuthData (BasicAuth : auths)
DataBasicAuth Credentials
credentials
  IO () -> ClientM ()
forall a. IO a -> ClientM a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ClientM ()) -> IO () -> ClientM ()
forall a b. (a -> b) -> a -> b
$ Union
  '[WithStatus 200 ResponseLogin, WithStatus 401 ErrorBasicAuth,
    WithStatus 500 ()]
-> IO ()
forall a. Show a => a -> IO ()
print Union
  '[WithStatus 200 ResponseLogin, WithStatus 401 ErrorBasicAuth,
    WithStatus 500 ()]
resultLogin
  ResponseLogin
responseLogin <-
    case Union
  '[WithStatus 200 ResponseLogin, WithStatus 401 ErrorBasicAuth,
    WithStatus 500 ()]
resultLogin of
      Z (I (WithStatus @200 ResponseLogin
x)) -> ResponseLogin -> ClientM ResponseLogin
forall a. a -> ClientM a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ResponseLogin
x
      Union
  '[WithStatus 200 ResponseLogin, WithStatus 401 ErrorBasicAuth,
    WithStatus 500 ()]
_ -> ClientM ResponseLogin
forall a. HasCallStack => a
undefined

  IO () -> ClientM ()
forall a. IO a -> ClientM a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ClientM ()) -> IO () -> ClientM ()
forall a b. (a -> b) -> a -> b
$ String -> IO ()
putStrLn String
"Login with JWT."
  let token :: Jwt
token = ResponseLogin -> Jwt
Route.User.responseLoginJwt ResponseLogin
responseLogin
  Union
  '[WithStatus 200 ResponseLogin, WithStatus 401 ErrorBasicAuth,
    WithStatus 500 ()]
nextLoginResult <- AuthData '[BasicAuth, JWTWithSession]
-> ClientM
     (Union
        '[WithStatus 200 ResponseLogin, WithStatus 401 ErrorBasicAuth,
          WithStatus 500 ()])
endpointLogin (AuthData '[BasicAuth, JWTWithSession]
 -> ClientM
      (Union
         '[WithStatus 200 ResponseLogin, WithStatus 401 ErrorBasicAuth,
           WithStatus 500 ()]))
-> AuthData '[BasicAuth, JWTWithSession]
-> ClientM
     (Union
        '[WithStatus 200 ResponseLogin, WithStatus 401 ErrorBasicAuth,
          WithStatus 500 ()])
forall a b. (a -> b) -> a -> b
$ AuthData '[JWTWithSession] -> AuthData '[BasicAuth, JWTWithSession]
forall (xs1 :: [*]) x. AuthData xs1 -> AuthData (x : xs1)
DataNextAuth (AuthData '[JWTWithSession]
 -> AuthData '[BasicAuth, JWTWithSession])
-> AuthData '[JWTWithSession]
-> AuthData '[BasicAuth, JWTWithSession]
forall a b. (a -> b) -> a -> b
$ Jwt -> AuthData '[JWTWithSession]
forall (auths :: [*]). Jwt -> AuthData (JWTWithSession : auths)
DataJWTWithSession Jwt
token
  IO () -> ClientM ()
forall a. IO a -> ClientM a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ClientM ()) -> IO () -> ClientM ()
forall a b. (a -> b) -> a -> b
$ Union
  '[WithStatus 200 ResponseLogin, WithStatus 401 ErrorBasicAuth,
    WithStatus 500 ()]
-> IO ()
forall a. Show a => a -> IO ()
print Union
  '[WithStatus 200 ResponseLogin, WithStatus 401 ErrorBasicAuth,
    WithStatus 500 ()]
nextLoginResult
  ResponseLogin
nextResponseLogin <-
    case Union
  '[WithStatus 200 ResponseLogin, WithStatus 401 ErrorBasicAuth,
    WithStatus 500 ()]
resultLogin of
      Z (I (WithStatus @200 ResponseLogin
x)) -> ResponseLogin -> ClientM ResponseLogin
forall a. a -> ClientM a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ResponseLogin
x
      Union
  '[WithStatus 200 ResponseLogin, WithStatus 401 ErrorBasicAuth,
    WithStatus 500 ()]
_ -> ClientM ResponseLogin
forall a. HasCallStack => a
undefined
  let nextToken :: Jwt
nextToken = ResponseLogin -> Jwt
Route.User.responseLoginJwt ResponseLogin
nextResponseLogin

  IO () -> ClientM ()
forall a. IO a -> ClientM a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ClientM ()) -> IO () -> ClientM ()
forall a b. (a -> b) -> a -> b
$ String -> IO ()
putStrLn String
"Profile."
  let requestProfile :: RequestProfile
requestProfile =
        Route.User.MkRequestProfile
          { requestProfileUser :: NameOrIdentifier Username IdentifierUser
Route.User.requestProfileUser = Username -> NameOrIdentifier Username IdentifierUser
forall name identifier. name -> NameOrIdentifier name identifier
Name Username
name
          }
  Union
  '[WithStatus 200 ResponseProfile,
    WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth,
    WithStatus 404 (), WithStatus 500 ()]
resultProfile <- AuthData '[JWTWithSession]
-> RequestProfile
-> ClientM
     (Union
        '[WithStatus 200 ResponseProfile,
          WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth,
          WithStatus 404 (), WithStatus 500 ()])
endpointProfile (Jwt -> AuthData '[JWTWithSession]
forall (auths :: [*]). Jwt -> AuthData (JWTWithSession : auths)
DataJWTWithSession Jwt
nextToken) RequestProfile
requestProfile
  IO () -> ClientM ()
forall a. IO a -> ClientM a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ClientM ()) -> IO () -> ClientM ()
forall a b. (a -> b) -> a -> b
$ Union
  '[WithStatus 200 ResponseProfile,
    WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth,
    WithStatus 404 (), WithStatus 500 ()]
-> IO ()
forall a. Show a => a -> IO ()
print Union
  '[WithStatus 200 ResponseProfile,
    WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth,
    WithStatus 404 (), WithStatus 500 ()]
resultProfile

  IO () -> ClientM ()
forall a. IO a -> ClientM a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ClientM ()) -> IO () -> ClientM ()
forall a b. (a -> b) -> a -> b
$ String -> IO ()
putStrLn String
"Create space."
  let requestSpaceCreate :: RequestSpaceCreate
requestSpaceCreate =
        Route.Space.MkRequestSpaceCreate
          { requestSpaceCreateName :: NameSpace
Route.Space.requestSpaceCreateName = NameSpace
spacename
          , requestSpaceCreateTimezone :: TZLabel
Route.Space.requestSpaceCreateTimezone = TZLabel
T.Europe__Paris
          , requestSpaceCreateVisibility :: VisibilitySpace
Route.Space.requestSpaceCreateVisibility = VisibilitySpace
MkVisibilitySpaceVisible
          }
  Union
  '[WithStatus 201 ResponseSpaceCreate,
    WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth,
    WithStatus 500 ()]
resultSpaceCreate <- AuthData '[JWTWithSession]
-> RequestSpaceCreate
-> ClientM
     (Union
        '[WithStatus 201 ResponseSpaceCreate,
          WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth,
          WithStatus 500 ()])
endpointSpaceCreate (Jwt -> AuthData '[JWTWithSession]
forall (auths :: [*]). Jwt -> AuthData (JWTWithSession : auths)
DataJWTWithSession Jwt
nextToken) RequestSpaceCreate
requestSpaceCreate
  IO () -> ClientM ()
forall a. IO a -> ClientM a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ClientM ()) -> IO () -> ClientM ()
forall a b. (a -> b) -> a -> b
$ Union
  '[WithStatus 201 ResponseSpaceCreate,
    WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth,
    WithStatus 500 ()]
-> IO ()
forall a. Show a => a -> IO ()
print Union
  '[WithStatus 201 ResponseSpaceCreate,
    WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth,
    WithStatus 500 ()]
resultSpaceCreate

  IO () -> ClientM ()
forall a. IO a -> ClientM a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ClientM ()) -> IO () -> ClientM ()
forall a b. (a -> b) -> a -> b
$ String -> IO ()
putStrLn String
"Create desk."
  let requestDeskCreate :: RequestDeskCreate
requestDeskCreate =
        Route.Space.MkRequestDeskCreate
          { requestDeskCreateName :: NameDesk
Route.Space.requestDeskCreateName = Text -> NameDesk
MkNameDesk Text
"neptune"
          , requestDeskCreateSpace :: NameOrIdentifier NameSpace IdentifierSpace
Route.Space.requestDeskCreateSpace = NameSpace -> NameOrIdentifier NameSpace IdentifierSpace
forall name identifier. name -> NameOrIdentifier name identifier
Name NameSpace
spacename
          , requestDeskCreateLocation :: Maybe LocationDesk
Route.Space.requestDeskCreateLocation = Maybe LocationDesk
forall a. Maybe a
Nothing
          }
  Union
  '[WithStatus 201 ResponseDeskCreate,
    WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth,
    WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditDesk),
    WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]
resultDeskCreate <- 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 (Jwt -> AuthData '[JWTWithSession]
forall (auths :: [*]). Jwt -> AuthData (JWTWithSession : auths)
DataJWTWithSession Jwt
nextToken) RequestDeskCreate
requestDeskCreate
  IO () -> ClientM ()
forall a. IO a -> ClientM a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ClientM ()) -> IO () -> ClientM ()
forall a b. (a -> b) -> a -> b
$ Union
  '[WithStatus 201 ResponseDeskCreate,
    WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth,
    WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditDesk),
    WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]
-> IO ()
forall a. Show a => a -> IO ()
print Union
  '[WithStatus 201 ResponseDeskCreate,
    WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth,
    WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditDesk),
    WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]
resultDeskCreate

  IO () -> ClientM ()
forall a. IO a -> ClientM a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ClientM ()) -> IO () -> ClientM ()
forall a b. (a -> b) -> a -> b
$ String -> IO ()
putStrLn String
"Create desk."
  let requestDeskCreate2 :: RequestDeskCreate
requestDeskCreate2 =
        Route.Space.MkRequestDeskCreate
          { requestDeskCreateName :: NameDesk
Route.Space.requestDeskCreateName = Text -> NameDesk
MkNameDesk Text
"saturn"
          , requestDeskCreateSpace :: NameOrIdentifier NameSpace IdentifierSpace
Route.Space.requestDeskCreateSpace = NameSpace -> NameOrIdentifier NameSpace IdentifierSpace
forall name identifier. name -> NameOrIdentifier name identifier
Name NameSpace
spacename
          , requestDeskCreateLocation :: Maybe LocationDesk
Route.Space.requestDeskCreateLocation = Maybe LocationDesk
forall a. Maybe a
Nothing
          }
  Union
  '[WithStatus 201 ResponseDeskCreate,
    WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth,
    WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditDesk),
    WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]
resultDeskCreate2 <- 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 (Jwt -> AuthData '[JWTWithSession]
forall (auths :: [*]). Jwt -> AuthData (JWTWithSession : auths)
DataJWTWithSession Jwt
nextToken) RequestDeskCreate
requestDeskCreate2
  IO () -> ClientM ()
forall a. IO a -> ClientM a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ClientM ()) -> IO () -> ClientM ()
forall a b. (a -> b) -> a -> b
$ Union
  '[WithStatus 201 ResponseDeskCreate,
    WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth,
    WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditDesk),
    WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]
-> IO ()
forall a. Show a => a -> IO ()
print Union
  '[WithStatus 201 ResponseDeskCreate,
    WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth,
    WithStatus 403 (ErrorInsufficientPermission 'MkPermissionEditDesk),
    WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]
resultDeskCreate2

  IO () -> ClientM ()
forall a. IO a -> ClientM a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ClientM ()) -> IO () -> ClientM ()
forall a b. (a -> b) -> a -> b
$ String -> IO ()
putStrLn String
"List desks."
  let requestDeskList :: RequestDeskList
requestDeskList =
        Route.Space.MkRequestDeskList
          { requestDeskListSpace :: NameOrIdentifier NameSpace IdentifierSpace
Route.Space.requestDeskListSpace = NameSpace -> NameOrIdentifier NameSpace IdentifierSpace
forall name identifier. name -> NameOrIdentifier name identifier
Name NameSpace
spacename
          , requestDeskListTimeWindow :: IntervalUnbounded UTCTime
Route.Space.requestDeskListTimeWindow = IntervalUnbounded UTCTime
forall a. IntervalUnbounded a
unbounded
          }
  Union
  '[WithStatus 200 ResponseDeskList,
    WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth,
    WithStatus
      403 (ErrorInsufficientPermission 'MkPermissionViewSpace),
    WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]
resultDeskList <- 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 (Jwt -> AuthData '[JWTWithSession]
forall (auths :: [*]). Jwt -> AuthData (JWTWithSession : auths)
DataJWTWithSession Jwt
nextToken) RequestDeskList
requestDeskList
  IO () -> ClientM ()
forall a. IO a -> ClientM a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ClientM ()) -> IO () -> ClientM ()
forall a b. (a -> b) -> a -> b
$ Union
  '[WithStatus 200 ResponseDeskList,
    WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth,
    WithStatus
      403 (ErrorInsufficientPermission 'MkPermissionViewSpace),
    WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]
-> IO ()
forall a. Show a => a -> IO ()
print Union
  '[WithStatus 200 ResponseDeskList,
    WithStatus 400 ErrorParseBodyJson, WithStatus 401 ErrorBearerAuth,
    WithStatus
      403 (ErrorInsufficientPermission 'MkPermissionViewSpace),
    WithStatus 404 (StaticText "Space not found."), WithStatus 500 ()]
resultDeskList

  IO () -> ClientM ()
forall a. IO a -> ClientM a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ClientM ()) -> IO () -> ClientM ()
forall a b. (a -> b) -> a -> b
$ String -> IO ()
putStrLn String
"Create reservation."
  UTCTime
currentTime <- IO UTCTime -> ClientM UTCTime
forall a. IO a -> ClientM a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO UTCTime
T.getCurrentTime
  let requestReservationCreate :: RequestReservationCreate
requestReservationCreate =
        Route.Reservation.MkRequestReservationCreate
          { requestReservationCreateDesk :: NameOrIdentifier DeskNameWithContext IdentifierDesk
Route.Reservation.requestReservationCreateDesk = DeskNameWithContext
-> NameOrIdentifier DeskNameWithContext IdentifierDesk
forall name identifier. name -> NameOrIdentifier name identifier
Name (DeskNameWithContext
 -> NameOrIdentifier DeskNameWithContext IdentifierDesk)
-> DeskNameWithContext
-> NameOrIdentifier DeskNameWithContext IdentifierDesk
forall a b. (a -> b) -> a -> b
$ NameDesk -> NameSpace -> DeskNameWithContext
MkDeskNameWithContext (Text -> NameDesk
MkNameDesk Text
"saturn") NameSpace
spacename
          , requestReservationCreateTimeWindow :: IntervalNonDegenerate UTCTime
Route.Reservation.requestReservationCreateTimeWindow =
              Interval UTCTime -> IntervalNonDegenerate UTCTime
forall a. Interval a -> IntervalNonDegenerate a
MkIntervalNonDegenerateUnsafe (Interval UTCTime -> IntervalNonDegenerate UTCTime)
-> Interval UTCTime -> IntervalNonDegenerate UTCTime
forall a b. (a -> b) -> a -> b
$
                UTCTime -> UTCTime -> Interval UTCTime
forall a. a -> a -> Interval a
MkIntervalUnsafe
                  UTCTime
currentTime
                  (Pico -> NominalDiffTime
T.secondsToNominalDiffTime (Pico
60 Pico -> Pico -> Pico
forall a. Num a => a -> a -> a
* Pico
60) NominalDiffTime -> UTCTime -> UTCTime
`T.addUTCTime` UTCTime
currentTime)
          }
  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 ()]
resultReservationCreate <- 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 (Jwt -> AuthData '[JWTWithSession]
forall (auths :: [*]). Jwt -> AuthData (JWTWithSession : auths)
DataJWTWithSession Jwt
nextToken) RequestReservationCreate
requestReservationCreate
  IO () -> ClientM ()
forall a. IO a -> ClientM a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ClientM ()) -> IO () -> ClientM ()
forall a b. (a -> b) -> a -> b
$ 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 ()]
-> IO ()
forall a. Show a => a -> IO ()
print 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 ()]
resultReservationCreate

  () -> ClientM ()
forall a. a -> ClientM a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()