libeufin

Integration and sandbox testing for FinTech APIs and data formats
Log | Files | Refs | Submodules | README | LICENSE

commit 5490a93b97307481d72bea3142ba1e6abafced7d
parent 47c4d337457565de9d967ac1719feb31af29d43e
Author: Antoine A <>
Date:   Mon,  3 Jun 2024 17:45:14 +0900

Prepare for wire transfer fees

Diffstat:
Mbank/src/main/kotlin/tech/libeufin/bank/Config.kt | 2++
Mbank/src/main/kotlin/tech/libeufin/bank/api/BankIntegrationApi.kt | 2+-
Mbank/src/main/kotlin/tech/libeufin/bank/api/CoreBankApi.kt | 1+
Mcontrib/bank.conf | 3+++
Mdatabase-versioning/libeufin-bank-procedures.sql | 7++++++-
5 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/bank/src/main/kotlin/tech/libeufin/bank/Config.kt b/bank/src/main/kotlin/tech/libeufin/bank/Config.kt @@ -35,6 +35,7 @@ data class BankConfig( val baseUrl: String?, val regionalCurrency: String, val regionalCurrencySpec: CurrencySpecification, + val wireTransferFees: TalerAmount?, val allowRegistration: Boolean, val allowAccountDeletion: Boolean, val allowEditName: Boolean, @@ -126,6 +127,7 @@ fun TalerConfig.loadBankConfig(): BankConfig { allowConversion = allowConversion, defaultDebtLimit = amount("libeufin-bank", "default_debt_limit", regionalCurrency) ?: TalerAmount(0, 0, regionalCurrency), registrationBonus = amount("libeufin-bank", "registration_bonus", regionalCurrency) ?: TalerAmount(0, 0, regionalCurrency), + wireTransferFees = amount("libeufin-bank", "wire_transfer_fees", regionalCurrency), suggestedWithdrawalExchange = lookupString("libeufin-bank", "suggested_withdrawal_exchange"), spaPath = lookupPath("libeufin-bank", "spa"), baseUrl = lookupString("libeufin-bank", "base_url"), diff --git a/bank/src/main/kotlin/tech/libeufin/bank/api/BankIntegrationApi.kt b/bank/src/main/kotlin/tech/libeufin/bank/api/BankIntegrationApi.kt @@ -44,7 +44,7 @@ fun Routing.bankIntegrationApi(db: Database, ctx: BankConfig) { get("/taler-integration/withdrawal-operation/{wopid}") { val uuid = call.uuidPath("wopid") val params = StatusParams.extract(call.request.queryParameters) - val op = db.withdrawal.pollStatus(uuid, params, ctx.wireMethod) ?: throw notFound( + val op = db.withdrawal.pollStatus(uuid, params, ctx.wireMethod)?.copy(card_fees = ctx.wireTransferFees) ?: throw notFound( "Withdrawal operation '$uuid' not found", TalerErrorCode.BANK_TRANSACTION_NOT_FOUND ) diff --git a/bank/src/main/kotlin/tech/libeufin/bank/api/CoreBankApi.kt b/bank/src/main/kotlin/tech/libeufin/bank/api/CoreBankApi.kt @@ -489,6 +489,7 @@ private fun Routing.coreBankWithdrawalApi(db: Database, ctx: BankConfig) { auth(db, TokenScope.readwrite) { post("/accounts/{USERNAME}/withdrawals") { val req = call.receive<BankAccountCreateWithdrawalRequest>() + // TODO check card_fees req.amount?.run(ctx::checkRegionalCurrency) req.suggested_amount?.run(ctx::checkRegionalCurrency) val opId = UUID.randomUUID() diff --git a/contrib/bank.conf b/contrib/bank.conf @@ -18,6 +18,9 @@ WIRE_TYPE = # Bank display name, used in webui and TAN messages. Default is "Taler Bank" # NAME = "Custom Bank" +# Bank transfer execution fees. TODO not applied yet. +# WIRE_TRANSFER_FEES = KUDOS:10 + # Default debt limit for newly created accounts. Default is CURRENCY:0 # DEFAULT_DEBT_LIMIT = KUDOS:200 diff --git a/database-versioning/libeufin-bank-procedures.sql b/database-versioning/libeufin-bank-procedures.sql @@ -493,6 +493,9 @@ SELECT NULL, NULL ) as transfer; + +-- TODO wire transfer fees + -- Store operation IF in_request_uid IS NOT NULL THEN INSERT INTO bank_transaction_operations (request_uid, bank_transaction) @@ -695,7 +698,7 @@ IF NOT FOUND OR already_confirmed OR out_aborted OR out_not_selected THEN RETURN; END IF; --- Check exchange account then 2faa +-- Check exchange account then 2fa SELECT bank_account_id INTO exchange_bank_account_id @@ -724,6 +727,8 @@ IF out_balance_insufficient THEN RETURN; END IF; +-- TODO wire transfer fees + -- Confirm operation UPDATE taler_withdrawal_operations SET confirmation_done = true