commit f9285a122fa3d38374a6a26c60002b051ac1f407
parent a40a2847e2b23ced35e50860300f3c7be2dfc1c3
Author: Florian Dold <florian.dold@gmail.com>
Date: Thu, 18 Jun 2020 23:41:25 +0530
entropy
Diffstat:
2 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/DB.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/DB.kt
@@ -220,6 +220,8 @@ object NexusBankAccountsTable : IdTable<String>() {
// Highest bank message ID that this bank account is aware of.
val highestSeenBankMessageId = integer("highestSeenBankMessageId")
+
+ val pain001Counter = long("pain001counter")
}
class NexusBankAccountEntity(id: EntityID<String>) : Entity<String>(id) {
@@ -230,6 +232,7 @@ class NexusBankAccountEntity(id: EntityID<String>) : Entity<String>(id) {
var bankCode by NexusBankAccountsTable.bankCode
var defaultBankConnection by NexusBankConnectionEntity optionalReferencedOn NexusBankAccountsTable.defaultBankConnection
var highestSeenBankMessageId by NexusBankAccountsTable.highestSeenBankMessageId
+ var pain001Counter by NexusBankAccountsTable.pain001Counter
}
object EbicsSubscribersTable : IntIdTable() {
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/bankaccount/BankAccount.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/bankaccount/BankAccount.kt
@@ -195,9 +195,12 @@ fun getPreparedPayment(uuid: Long): PaymentInitiationEntity {
* by this pain document.
*/
fun addPreparedPayment(paymentData: Pain001Data, debitorAccount: NexusBankAccountEntity): PaymentInitiationEntity {
- val now = Instant.now().toEpochMilli()
- val nowHex = now.toString(16)
return transaction {
+ val now = Instant.now().toEpochMilli()
+ val nowHex = now.toString(16)
+ val painCounter = debitorAccount.pain001Counter++
+ val painHex = painCounter.toString(16)
+ val acctHex = debitorAccount.id.hashCode().toString(16).substring(0, 4)
PaymentInitiationEntity.new {
bankAccount = debitorAccount
subject = paymentData.subject
@@ -206,10 +209,10 @@ fun addPreparedPayment(paymentData: Pain001Data, debitorAccount: NexusBankAccoun
creditorBic = paymentData.creditorBic
creditorIban = paymentData.creditorIban
preparationDate = now
- messageId = "leuf-m-pain1-$nowHex"
- endToEndId = "leuf-e-$nowHex"
- paymentInformationId = "leuf-p-$nowHex"
- instructionId = "leuf-i-$nowHex"
+ messageId = "leuf-mp1-$nowHex-$painHex-$acctHex"
+ endToEndId = "leuf-e-$nowHex-$painHex-$acctHex"
+ paymentInformationId = "leuf-p-$nowHex-$painHex-$acctHex"
+ instructionId = "leuf-i-$nowHex-$painHex-$acctHex"
}
}
}