module IpeDb.Query (
  withInfoProvDb,
  setupInfoProvDb,
  populateFromEventlog,
  lookupInfoProv,
  insertInfoProv,
  listInfoProvs,
) where

import qualified IpeDb.Eventlog.Index as Index
import IpeDb.InfoProv
import IpeDb.Types

-- ----------------------------------------------------------------------------
-- High Level API
-- ----------------------------------------------------------------------------

withInfoProvDb :: FilePath -> (InfoProvDb -> IO a) -> IO a
withInfoProvDb :: forall a. FilePath -> (InfoProvDb -> IO a) -> IO a
withInfoProvDb FilePath
fp InfoProvDb -> IO a
act =
  FilePath -> (Connection -> IO a) -> IO a
forall a. FilePath -> (Connection -> IO a) -> IO a
Index.withDatabase FilePath
fp (\Connection
conn -> InfoProvDb -> IO a
act InfoProvDb{Connection
conn :: Connection
conn :: Connection
conn})

setupInfoProvDb :: InfoProvDb -> IO ()
setupInfoProvDb :: InfoProvDb -> IO ()
setupInfoProvDb InfoProvDb
db =
  Connection -> IO ()
Index.setupDb InfoProvDb
db.conn

populateFromEventlog :: InfoProvDb -> FilePath -> IO ()
populateFromEventlog :: InfoProvDb -> FilePath -> IO ()
populateFromEventlog InfoProvDb
db FilePath
fp =
  Connection -> FilePath -> IO ()
Index.generateInfoProvDb InfoProvDb
db.conn FilePath
fp

lookupInfoProv :: InfoProvDb -> IpeId -> IO (Maybe InfoProv)
lookupInfoProv :: InfoProvDb -> IpeId -> IO (Maybe InfoProv)
lookupInfoProv InfoProvDb
db IpeId
ipeId = do
  Connection -> IpeId -> IO (Maybe InfoProv)
Index.findOneInfoProv InfoProvDb
db.conn IpeId
ipeId

insertInfoProv :: InfoProvDb -> InfoProv -> IO ()
insertInfoProv :: InfoProvDb -> InfoProv -> IO ()
insertInfoProv InfoProvDb
db InfoProv
ipe = do
  Connection -> InfoProv -> IO ()
Index.insertInfoProv InfoProvDb
db.conn InfoProv
ipe

listInfoProvs :: InfoProvDb -> IO [InfoProv]
listInfoProvs :: InfoProvDb -> IO [InfoProv]
listInfoProvs InfoProvDb
db = do
  Connection -> IO [InfoProv]
Index.findAllInfoProvs InfoProvDb
db.conn