From dcd0a7a9b2612f383c1f627c72c27868c367058d Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Fri, 21 Jul 2023 00:01:02 +0200 Subject: [haskell] abstracted away common database access patterns --- haskell/src/SpaceTraders/Database/Contracts.hs | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) (limited to 'haskell/src/SpaceTraders/Database/Contracts.hs') diff --git a/haskell/src/SpaceTraders/Database/Contracts.hs b/haskell/src/SpaceTraders/Database/Contracts.hs index 1084447..20170ba 100644 --- a/haskell/src/SpaceTraders/Database/Contracts.hs +++ b/haskell/src/SpaceTraders/Database/Contracts.hs @@ -9,7 +9,6 @@ module SpaceTraders.Database.Contracts import Control.Monad.Reader import Data.Aeson -import Data.Maybe import qualified Database.SQLite.Simple as S import SpaceTraders @@ -17,24 +16,16 @@ import SpaceTraders.Model.Contract import SpaceTraders.Utils addContract :: (HasDatabaseConn env, MonadIO m, MonadReader env m) => Contract -> m () -addContract contract = do - env <- ask - liftIO $ S.execute (getConn env) "INSERT INTO contracts(data) VALUES (json(?));" (S.Only (encode contract)) +addContract contract = execute "INSERT INTO contracts(data) VALUES (json(?));" (S.Only (encode contract)) getContracts :: (HasDatabaseConn env, MonadIO m, MonadReader env m) => m [Contract] -getContracts = do - env <- ask - ret <- liftIO $ S.query_ (getConn env) "SELECT data FROM contracts;" - return . catMaybes $ map (decodeText . head) ret +getContracts = query_ "SELECT data FROM contracts;" -setContract :: (HasDatabaseConn env, MonadIO m, MonadReader env m) => Contract -> m () +setContract :: (HasDatabaseConn env, MonadFail m, MonadIO m, MonadReader env m) => Contract -> m () setContract contract = do - env <- ask - count <- liftIO (S.query (getConn env) "SELECT count(id) FROM contracts WHERE data->>'contractId' = ?;" (S.Only $ contractId contract) :: IO [[Int]]) - if count == [[0]] then addContract contract - else updateContract contract + c <- count "SELECT count(id) FROM contracts WHERE data->>'contractId' = ?;" (S.Only $ contractId contract) + if c == 0 then addContract contract + else updateContract contract updateContract :: (HasDatabaseConn env, MonadIO m, MonadReader env m) => Contract -> m () -updateContract contract = do - env <- ask - liftIO $ S.execute (getConn env) "UPDATE contracts SET data = json(?) WHERE data->>'contractId' = ?;" (encode contract, contractId contract) +updateContract contract = execute "UPDATE contracts SET data = json(?) WHERE data->>'contractId' = ?;" (encode contract, contractId contract) -- cgit v1.2.3