1
Fork 0
mirror of https://github.com/Airsequel/AirGQL.git synced 2025-07-11 01:14:54 +03:00
airgql/source/AirGQL/Servant/Database.hs

46 lines
1 KiB
Haskell

{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-}
{-# HLINT ignore "Use maybe" #-}
{-# HLINT ignore "Avoid lambda" #-}
{-# HLINT ignore "Replace case with maybe" #-}
module AirGQL.Servant.Database (
apiDatabaseSchemaGetHandler,
apiDatabaseVacuumPostHandler,
) where
import Protolude (
Applicative (pure),
MonadIO (liftIO),
Monoid (mempty),
($),
)
import Data.Aeson (Object)
import Data.Text (Text)
import Database.SQLite.Simple qualified as SS
import Servant.Server qualified as Servant
import AirGQL.ExternalAppContext (ExternalAppContext)
import AirGQL.Utils (
getMainDbPath,
runSqliteCommand,
withRetryConn,
)
apiDatabaseSchemaGetHandler
:: ExternalAppContext
-> Text
-> Servant.Handler Text
apiDatabaseSchemaGetHandler ctx dbId = do
runSqliteCommand ctx (getMainDbPath dbId) ".schema"
apiDatabaseVacuumPostHandler
:: Text
-> Servant.Handler Object
apiDatabaseVacuumPostHandler dbId = do
liftIO $ withRetryConn (getMainDbPath dbId) $ \conn ->
SS.execute_ conn "VACUUM"
pure mempty