ebook-manager/backend/src/Database.hs

35 lines
952 B
Haskell
Raw Normal View History

2018-08-02 23:59:08 +03:00
{-# Language TypeApplications #-}
{-# Language DataKinds #-}
{-# Language FlexibleContexts #-}
{-# Language ConstraintKinds #-}
module Database
( DBLike
, runDB
, query
, select
2018-08-03 23:36:38 +03:00
, gen
, fromRel
2018-08-05 23:13:49 +03:00
, fromRels
2018-08-03 23:36:38 +03:00
, toRel
2018-08-14 22:19:55 +03:00
, transaction
2018-08-03 23:36:38 +03:00
, SeldaT )
2018-08-02 23:59:08 +03:00
where
2018-10-17 23:51:30 +03:00
import ClassyPrelude
2018-08-02 23:59:08 +03:00
import Control.Lens (view)
2018-10-17 23:51:30 +03:00
import Control.Monad.Catch (MonadMask)
import Control.Monad.Trans.Control (MonadBaseControl)
import Data.Generics.Product
2018-08-02 23:59:08 +03:00
import Data.Pool (Pool, withResource)
2018-08-14 22:19:55 +03:00
import Database.Selda (query, select, transaction)
2018-10-17 23:51:30 +03:00
import Database.Selda.Backend (SeldaConnection, runSeldaT, SeldaT)
2018-08-05 23:13:49 +03:00
import Database.Selda.Generic (gen, fromRel, fromRels, toRel)
2018-08-02 23:59:08 +03:00
2018-10-17 23:51:30 +03:00
type DBLike r m = (MonadBaseControl IO m, MonadIO m, MonadReader r m, HasField "database" r r (Pool SeldaConnection) (Pool SeldaConnection), MonadMask m)
2018-08-02 23:59:08 +03:00
runDB :: DBLike r m => SeldaT m a -> m a
runDB q = do
pool <- view (field @"database")
withResource pool $ \conn ->
runSeldaT q conn