libeufin

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

commit 6aaf7564a1778a3fda0302c005049147b5c593a3
parent 94126e8b928ad46ab078f45e82357dfb3ac09a5a
Author: MS <ms@taler.net>
Date:   Fri, 19 May 2023 16:38:42 +0200

Tx deduplication for x-libeufin-bank.

Diffstat:
Mnexus/src/main/kotlin/tech/libeufin/nexus/iso20022/Iso20022.kt | 2+-
Mnexus/src/main/kotlin/tech/libeufin/nexus/server/Helpers.kt | 10+++-------
Mnexus/src/main/kotlin/tech/libeufin/nexus/xlibeufinbank/XLibeufinBankNexus.kt | 4++--
3 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/iso20022/Iso20022.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/iso20022/Iso20022.kt @@ -801,7 +801,7 @@ fun extractPaymentUidFromSingleton( ) throw internalServerError("Internal reconciliation error (no EndToEndId)") } - return "${PaymentUidQualifiers.NEXUS_GIVEN}:$expectedEndToEndId" + return "${PaymentUidQualifiers.USER_GIVEN}:$expectedEndToEndId" } // Didn't return/throw before, it must be an incoming payment. val maybeAcctSvcrRef = tx.details.accountServicerRef diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/server/Helpers.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/server/Helpers.kt @@ -1,13 +1,9 @@ package tech.libeufin.nexus.server -import CamtBankAccountEntry import com.fasterxml.jackson.databind.JsonNode -import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.node.ObjectNode import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import io.ktor.http.* -import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq -import org.jetbrains.exposed.sql.SqlExpressionBuilder.greaterEq import org.jetbrains.exposed.sql.and import org.jetbrains.exposed.sql.transactions.transaction import tech.libeufin.nexus.* @@ -78,9 +74,9 @@ enum class EbicsDialects(val dialectName: String) { * enum class. This way, Nexus has more control when it tries * to locally reconcile payments. */ -enum class PaymentUidQualifiers(qualifierName: String) { - BANK_GIVEN("bank_given"), - NEXUS_GIVEN("nexus_given") +enum class PaymentUidQualifiers { + BANK_GIVEN, + USER_GIVEN } // Valid connection types. diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/xlibeufinbank/XLibeufinBankNexus.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/xlibeufinbank/XLibeufinBankNexus.kt @@ -359,7 +359,7 @@ fun processXLibeufinBankMessage( ) } // Searching for duplicates. - if (findDuplicate(bankAccountId, it.uid) != null) { + if (findDuplicate(bankAccountId, "${PaymentUidQualifiers.BANK_GIVEN}:${it.uid}") != null) { logger.debug("x-libeufin-bank ingestion: transaction ${it.uid} is a duplicate, skipping.") return@forEach } @@ -377,7 +377,7 @@ fun processXLibeufinBankMessage( * state. */ this.status = EntryStatus.BOOK - this.accountTransactionId = it.uid + this.accountTransactionId = "${PaymentUidQualifiers.BANK_GIVEN}:${it.uid}" this.transactionJson = jacksonObjectMapper( ).writeValueAsString(it.exportAsCamtModel()) this.creditDebitIndicator = direction.exportAsCamtDirection()