summaryrefslogtreecommitdiff
path: root/sandbox/src/main/kotlin/tech/libeufin/sandbox/bankAccount.kt
diff options
context:
space:
mode:
authorMS <ms@taler.net>2023-01-04 08:33:13 +0100
committerMS <ms@taler.net>2023-01-04 08:33:13 +0100
commit28fa97a6a4ed143d47bd2c3a0a4aafbf41e3ea00 (patch)
treecf261016069f247b36a9d7ca9273699bb45c38ce /sandbox/src/main/kotlin/tech/libeufin/sandbox/bankAccount.kt
parent0ebb94f89e3373533c2e21ff56272095ae12292d (diff)
downloadlibeufin-28fa97a6a4ed143d47bd2c3a0a4aafbf41e3ea00.tar.gz
libeufin-28fa97a6a4ed143d47bd2c3a0a4aafbf41e3ea00.tar.bz2
libeufin-28fa97a6a4ed143d47bd2c3a0a4aafbf41e3ea00.zip
Circuit API: implement cash-out.
Diffstat (limited to 'sandbox/src/main/kotlin/tech/libeufin/sandbox/bankAccount.kt')
-rw-r--r--sandbox/src/main/kotlin/tech/libeufin/sandbox/bankAccount.kt10
1 files changed, 8 insertions, 2 deletions
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/bankAccount.kt b/sandbox/src/main/kotlin/tech/libeufin/sandbox/bankAccount.kt
index 1705292c..33c565cc 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/bankAccount.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/bankAccount.kt
@@ -69,11 +69,12 @@ fun getBalance(accountLabel: String, withPending: Boolean = false): BigDecimal {
fun wireTransfer(
debitAccount: String,
creditAccount: String,
- demobank: String,
+ demobank: String = "default",
subject: String,
amount: String, // $currency:x.y
pmtInfId: String? = null
): String {
+ logger.debug("Maybe wire transfer: $debitAccount -> $creditAccount, $subject, $amount")
val args: Triple<BankAccountEntity, BankAccountEntity, DemobankConfigEntity> = transaction {
val demobankDb = ensureDemobank(demobank)
val debitAccountDb = getBankAccountFromLabel(debitAccount, demobankDb)
@@ -113,11 +114,16 @@ fun wireTransfer(
if (checkAmount.currency != demobank.currency)
throw badRequest("Won't wire transfer with currency: ${checkAmount.currency}")
// Check funds are sufficient.
+ /**
+ * Using 'pending' balance because Libeufin never books. The
+ * reason is that booking is not Taler-relevant.
+ */
val pendingBalance = getBalance(debitAccount, withPending = true)
val maxDebt = if (debitAccount.label == "admin") {
demobank.bankDebtLimit
} else demobank.usersDebtLimit
- if ((pendingBalance - checkAmount.amount).abs() > BigDecimal.valueOf(maxDebt.toLong())) {
+ val balanceCheck = pendingBalance - checkAmount.amount
+ if (balanceCheck < BigDecimal.ZERO && balanceCheck.abs() > BigDecimal.valueOf(maxDebt.toLong())) {
logger.info("Account ${debitAccount.label} would surpass debit threshold of $maxDebt. Rollback wire transfer")
throw SandboxError(HttpStatusCode.PreconditionFailed, "Insufficient funds")
}