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:
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()