{-# 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