libeufin

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

commit 9eb0e75ab5d57b61e0dd268b7f1e171134f770d5
parent 271dd2d5ad4ee9352dc0fe9d9b732f9a7608c60b
Author: Marcello Stanisci <ms@taler.net>
Date:   Thu, 30 Apr 2020 16:32:57 +0200

Reducing code.

Use only one table to map <nexus users, ebics subscribers, bank accounts>

Diffstat:
Mnexus/src/main/kotlin/tech/libeufin/nexus/DB.kt | 26++++++++------------------
Mnexus/src/main/kotlin/tech/libeufin/nexus/Helpers.kt | 20++++++++++----------
Mnexus/src/main/kotlin/tech/libeufin/nexus/Main.kt | 19++++++++++---------
Mnexus/src/main/kotlin/tech/libeufin/nexus/taler.kt | 3++-
4 files changed, 30 insertions(+), 38 deletions(-)

diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/DB.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/DB.kt @@ -217,26 +217,16 @@ class NexusUserEntity(id: EntityID<String>) : Entity<String>(id) { var password by NexusUsersTable.password } -object UserToBankAccountsTable : IntIdTable() { - val nexusUser = reference("nexusUser", NexusUsersTable) - val bankAccount = reference("bankAccount", BankAccountsTable) -} - -class UserToBankAccountEntity(id: EntityID<Int>): IntEntity(id) { - companion object : IntEntityClass<UserToBankAccountEntity>(UserToBankAccountsTable) - var nexusUser by NexusUserEntity referencedOn UserToBankAccountsTable.nexusUser - var bankAccount by BankAccountEntity referencedOn EbicsToBankAccountsTable.bankAccount -} - -object EbicsToBankAccountsTable : IntIdTable() { +object BankAccountMapsTable : IntIdTable() { val ebicsSubscriber = reference("ebicsSubscriber", EbicsSubscribersTable) val bankAccount = reference("bankAccount", BankAccountsTable) + val nexusUser = reference("nexusUser", NexusUsersTable) } - -class EbicsToBankAccountEntity(id: EntityID<Int>): IntEntity(id) { - companion object : IntEntityClass<EbicsToBankAccountEntity>(EbicsToBankAccountsTable) - var ebicsSubscriber by EbicsSubscriberEntity referencedOn EbicsToBankAccountsTable.ebicsSubscriber - var bankAccount by BankAccountEntity referencedOn EbicsToBankAccountsTable.bankAccount +class BankAccountMapEntity(id: EntityID<Int>): IntEntity(id) { + companion object : IntEntityClass<BankAccountMapEntity>(BankAccountMapsTable) + var ebicsSubscriber by EbicsSubscriberEntity referencedOn BankAccountMapsTable.ebicsSubscriber + var bankAccount by BankAccountEntity referencedOn BankAccountMapsTable.bankAccount + var nexusUser by NexusUserEntity referencedOn BankAccountMapsTable.nexusUser } fun dbCreateTables() { @@ -252,7 +242,7 @@ fun dbCreateTables() { TalerIncomingPayments, TalerRequestedPayments, NexusUsersTable, - EbicsToBankAccountsTable + BankAccountMapsTable ) } } \ No newline at end of file diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/Helpers.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/Helpers.kt @@ -70,8 +70,8 @@ fun extractFirstBic(bankCodes: List<EbicsTypes.AbstractBankCode>?): String? { */ fun getSubscriberDetailsFromBankAccount(bankAccountId: String): EbicsClientSubscriberDetails { return transaction { - val map = EbicsToBankAccountEntity.find { - EbicsToBankAccountsTable.bankAccount eq bankAccountId + val map = BankAccountMapEntity.find { + BankAccountMapsTable.bankAccount eq bankAccountId }.firstOrNull() ?: throw NexusError( HttpStatusCode.NotFound, "Such bank account '$bankAccountId' has no EBICS subscriber associated" @@ -90,8 +90,8 @@ fun getSubscriberDetailsFromBankAccount(bankAccountId: String): EbicsClientSubsc fun getBankAccountFromNexusUserId(id: String): BankAccountEntity { logger.debug("Looking up bank account of user '$id'") val map = transaction { - UserToBankAccountEntity.find { - UserToBankAccountsTable.nexusUser eq id + BankAccountMapEntity.find { + BankAccountMapsTable.nexusUser eq id } }.firstOrNull() ?: throw NexusError( HttpStatusCode.NotFound, @@ -420,9 +420,9 @@ fun authenticateRequest(authorization: String?): String { */ fun subscriberHasRights(subscriber: EbicsSubscriberEntity, bankAccount: BankAccountEntity): Boolean { val row = transaction { - EbicsToBankAccountEntity.find { - EbicsToBankAccountsTable.bankAccount eq bankAccount.id and - (EbicsToBankAccountsTable.ebicsSubscriber eq subscriber.id) + BankAccountMapEntity.find { + BankAccountMapsTable.bankAccount eq bankAccount.id and + (BankAccountMapsTable.ebicsSubscriber eq subscriber.id) }.firstOrNull() } return row != null @@ -443,9 +443,9 @@ fun getBankAccountFromIban(iban: String): BankAccountEntity { fun userHasRights(nexusUser: NexusUserEntity, iban: String): Boolean { val row = transaction { val bankAccount = getBankAccountFromIban(iban) - UserToBankAccountEntity.find { - UserToBankAccountsTable.bankAccount eq bankAccount.id and - (UserToBankAccountsTable.nexusUser eq nexusUser.id) + BankAccountMapEntity.find { + BankAccountMapsTable.bankAccount eq bankAccount.id and + (BankAccountMapsTable.nexusUser eq nexusUser.id) }.firstOrNull() } return row != null diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt @@ -238,15 +238,15 @@ fun main() { val id = expectId(call.parameters["id"]) val ret = BankAccountsInfoResponse() transaction { - BankAccountEntity.find { - UserToBankAccountsTable.nexusUser eq id + BankAccountMapEntity.find { + BankAccountMapsTable.nexusUser eq id }.forEach { ret.accounts.add( BankAccountInfoElement( - accountHolderName = it.accountHolder, - iban = it.iban, - bankCode = it.bankCode, - accountId = it.id.value + accountHolderName = it.bankAccount.accountHolder, + iban = it.bankAccount.iban, + bankCode = it.bankAccount.bankCode, + accountId = it.bankAccount.id.value ) ) } @@ -263,8 +263,8 @@ fun main() { val ret = RawPayments() transaction { val nexusUser = extractNexusUser(nexusUserId) - val bankAccountsMap = UserToBankAccountEntity.find { - UserToBankAccountsTable.nexusUser eq nexusUser.id + val bankAccountsMap = BankAccountMapEntity.find { + BankAccountMapsTable.nexusUser eq nexusUser.id } bankAccountsMap.forEach { Pain001Entity.find { @@ -760,8 +760,9 @@ fun main() { iban = extractFirstIban(it.accountNumberList) ?: throw NexusError(HttpStatusCode.NotFound, reason = "bank gave no IBAN") bankCode = extractFirstBic(it.bankCodeList) ?: throw NexusError(HttpStatusCode.NotFound, reason = "bank gave no BIC") } - EbicsToBankAccountEntity.new { + BankAccountMapEntity.new { ebicsSubscriber = getEbicsSubscriberFromUser(nexusUser) + this.nexusUser = nexusUser this.bankAccount = bankAccount } } diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/taler.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/taler.kt @@ -547,9 +547,10 @@ class Taler(app: Route) { bankCode = "localhost" } val nexusUser = extractNexusUser(exchangeId) - EbicsToBankAccountEntity.new { + BankAccountMapEntity.new { bankAccount = newBankAccount ebicsSubscriber = getEbicsSubscriberFromUser(nexusUser) + this.nexusUser = nexusUser } } }