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

import Freckle.App.Prelude

import Database.Persist.Postgresql (runSqlPool)
import Database.Persist.Sql (SqlBackend)
import Freckle.App.Database (makePostgresPool)
import LoadEnv (loadEnv, loadEnvFrom)

-- | Run a db action against .env
runDB :: ReaderT SqlBackend IO b -> IO b
runDB :: ReaderT SqlBackend IO b -> IO b
runDB ReaderT SqlBackend IO b
f = IO ()
loadEnv IO () -> IO b -> IO b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ReaderT SqlBackend IO b -> IO 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' :: ReaderT SqlBackend IO b -> IO b
runDB' ReaderT SqlBackend IO b
f = do
  SqlPool
pool <- IO SqlPool
makePostgresPool
  ReaderT SqlBackend IO b -> SqlPool -> IO b
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

loadEnvTest :: IO ()
loadEnvTest :: IO ()
loadEnvTest = FilePath -> IO ()
loadEnvFrom FilePath
".env.test"