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:
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
}
}
}