module Freckle.App.Ghci
  ( runDB
  , runDB'
  ) where

import Freckle.App.Prelude

import Blammo.Logging.Simple
import Database.Persist.Postgresql (runSqlPool)
import Database.Persist.Sql (SqlBackend)
import Freckle.App.Database (makePostgresPool)
import qualified Freckle.App.Dotenv as Dotenv

-- | Run a db action against .env
runDB :: ReaderT SqlBackend IO b -> IO b
runDB :: forall b. ReaderT SqlBackend IO b -> IO b
runDB ReaderT SqlBackend IO b
f = IO ()
Dotenv.load forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> forall b. ReaderT SqlBackend IO b -> IO b
runDB' ReaderT SqlBackend IO b
f

-- | Run a db action
runDB' :: ReaderT SqlBackend IO b -> IO b
runDB' :: forall b. ReaderT SqlBackend IO b -> IO b
runDB' ReaderT SqlBackend IO b
f = do
  SqlPool
pool <- forall (m :: * -> *) a. MonadUnliftIO m => LoggingT m a -> m a
runSimpleLoggingT forall (m :: * -> *).
(MonadUnliftIO m, MonadLoggerIO m) =>
m SqlPool
makePostgresPool
  forall backend (m :: * -> *) a.
(MonadUnliftIO m, BackendCompatible SqlBackend backend) =>
ReaderT backend m a -> Pool backend -> m a
runSqlPool ReaderT SqlBackend IO b
f SqlPool
pool