summaryrefslogtreecommitdiff
path: root/sandbox/src/main/kotlin/tech/libeufin
diff options
context:
space:
mode:
authorMS <ms@taler.net>2023-08-31 21:05:56 +0200
committerMS <ms@taler.net>2023-08-31 21:05:56 +0200
commite9d4790da895a92adbb525f4c02bbdde90af5d6f (patch)
treef7af1dcb5c1303e65805233e1c7ef72512e5fbfc /sandbox/src/main/kotlin/tech/libeufin
parentf3cd4938fcb503823afd2eabf13012c774638320 (diff)
downloadlibeufin-e9d4790da895a92adbb525f4c02bbdde90af5d6f.tar.gz
libeufin-e9d4790da895a92adbb525f4c02bbdde90af5d6f.tar.bz2
libeufin-e9d4790da895a92adbb525f4c02bbdde90af5d6f.zip
progress on bank DB refactoring
Diffstat (limited to 'sandbox/src/main/kotlin/tech/libeufin')
-rw-r--r--sandbox/src/main/kotlin/tech/libeufin/sandbox/Database.kt66
1 files changed, 48 insertions, 18 deletions
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Database.kt b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Database.kt
index 76b99b8a..e7ca959a 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Database.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Database.kt
@@ -40,6 +40,17 @@ enum class TransactionDirection {
Credit, Debit
}
+data class BankInternalTransaction(
+ val creditorAccountId: Long,
+ val debtorAccountId: Long,
+ val subject: String,
+ val amount: TalerAmount,
+ val transactionDate: Long,
+ val accountServicerReference: String,
+ val endToEndId: String,
+ val paymentInformationId: String
+)
+
data class BankAccountTransaction(
val creditorIban: String,
val creditorBic: String,
@@ -216,6 +227,22 @@ class Database(private val dbConfig: String) {
return myExecute(stmt)
}
+ fun bankAccountSetMaxDebt(
+ bankAccountLabel: String,
+ maxDebt: TalerAmount
+ ): Boolean {
+ reconnect()
+ val stmt = prepare("""
+ UPDATE bank_accounts
+ SET max_debt=(?,?)::taler_amount
+ WHERE bank_account_label=?
+ """)
+ stmt.setLong(1, maxDebt.value)
+ stmt.setInt(2, maxDebt.frac)
+ stmt.setString(3, bankAccountLabel)
+ return myExecute(stmt)
+ }
+
fun bankAccountGetFromLabel(bankAccountLabel: String): BankAccount? {
reconnect()
val stmt = prepare("""
@@ -250,7 +277,6 @@ class Database(private val dbConfig: String) {
}
// More bankAccountGetFrom*() to come, on a needed basis.
- /*
// BANK ACCOUNT TRANSACTIONS
enum class BankTransactionResult {
NO_CREDITOR,
@@ -259,30 +285,34 @@ class Database(private val dbConfig: String) {
CONFLICT
}
fun bankTransactionCreate(
- // tx: BankInternalTransaction
- creditTx: BankAccountTransaction,
- debitTx: BankAccountTransaction
+ tx: BankInternalTransaction
): BankTransactionResult {
reconnect()
val stmt = prepare("""
SELECT out_nx_creditor, out_nx_debtor, out_balance_insufficient
- FROM bank_wire_transfer(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
- """ // FIXME: adjust balances.
+ FROM bank_wire_transfer(?,?,TEXT(?),(?,?)::taler_amount,?,TEXT(?),TEXT(?),TEXT(?))
+ """
)
- // FIXME: implement this operation with a stored procedure.
- // Credit side
- stmt.setString(1, tx.creditorAccountId)
- stmt.setString(1, tx.debitorAccountId)
- stmt.setString(7, tx.subject)
- stmt.setObject(8, tx.amount)
- stmt.setLong(9, tx.transactionDate)
- stmt.setString(10, tx.accountServicerReference)
- stmt.setString(11, tx.paymentInformationId)
- stmt.setString(12, tx.endToEndId)
-
- stmt.execute()
+ stmt.setLong(1, tx.creditorAccountId)
+ stmt.setLong(2, tx.debtorAccountId)
+ stmt.setString(3, tx.subject)
+ stmt.setLong(4, tx.amount.value)
+ stmt.setInt(5, tx.amount.frac)
+ stmt.setLong(6, tx.transactionDate)
+ stmt.setString(7, tx.accountServicerReference)
+ stmt.setString(8, tx.paymentInformationId)
+ stmt.setString(9, tx.endToEndId)
+ val rs = stmt.executeQuery()
+ rs.use {
+ if (!rs.next()) throw internalServerError("Bank transaction didn't properly return")
+ if (rs.getBoolean("out_nx_debtor")) return BankTransactionResult.NO_DEBTOR
+ if (rs.getBoolean("out_nx_creditor")) return BankTransactionResult.NO_CREDITOR
+ if (rs.getBoolean("out_balance_insufficient")) return BankTransactionResult.CONFLICT
+ return BankTransactionResult.SUCCESS
+ }
}
+ /*
fun bankTransactionGetForHistoryPage(
upperBound: Long,
bankAccountId: Long,