packages feed

hasql-transaction-0.9: conflicts-test/Main/Transactions.hs

module Main.Transactions where

import Prelude
import Hasql.Transaction
import qualified Main.Statements as A


createSchema :: Transaction ()
createSchema = statement Write Serializable A.createAccountTable ()

dropSchema :: Transaction ()
dropSchema = statement Write Serializable A.dropAccountTable ()

transfer :: Int64 -> Int64 -> Scientific -> Transaction Bool
transfer id1 id2 amount = do
  ifS
    (statement Write Serializable A.modifyBalance (id1, amount))
    (statement Write Serializable A.modifyBalance (id2, negate amount))
    (pure False)

transferTimes :: Int -> Int64 -> Int64 -> Scientific -> Transaction ()
transferTimes times id1 id2 amount = replicateM_ times (transfer id1 id2 amount)

getBalance :: Int64 -> Transaction (Maybe Scientific)
getBalance id = statement Read ReadCommitted A.getBalance id