diff options
Diffstat (limited to 'bank/src/main')
7 files changed, 32 insertions, 15 deletions
diff --git a/bank/src/main/kotlin/tech/libeufin/bank/Constants.kt b/bank/src/main/kotlin/tech/libeufin/bank/Constants.kt index 7a192308..15fe5be1 100644 --- a/bank/src/main/kotlin/tech/libeufin/bank/Constants.kt +++ b/bank/src/main/kotlin/tech/libeufin/bank/Constants.kt @@ -40,7 +40,7 @@ const val IBAN_ALLOCATION_RETRY_COUNTER: Int = 5 const val MAX_BODY_LENGTH: Long = 4 * 1024 // 4kB // API version -const val COREBANK_API_VERSION: String = "4:4:0" +const val COREBANK_API_VERSION: String = "4:5:0" const val CONVERSION_API_VERSION: String = "0:0:0" const val INTEGRATION_API_VERSION: String = "2:0:2" const val WIRE_GATEWAY_API_VERSION: String = "0:2:0" diff --git a/bank/src/main/kotlin/tech/libeufin/bank/TalerMessage.kt b/bank/src/main/kotlin/tech/libeufin/bank/TalerMessage.kt index ce459baa..b9bfcbec 100644 --- a/bank/src/main/kotlin/tech/libeufin/bank/TalerMessage.kt +++ b/bank/src/main/kotlin/tech/libeufin/bank/TalerMessage.kt @@ -55,6 +55,11 @@ enum class WithdrawalStatus { confirmed } +enum class AccountStatus { + active, + deleted +} + enum class RoundingMode { zero, up, @@ -350,7 +355,8 @@ data class AccountMinimalData( val debit_threshold: TalerAmount, val is_public: Boolean, val is_taler_exchange: Boolean, - val row_id: Long + val row_id: Long, + val status: AccountStatus ) /** @@ -374,7 +380,8 @@ data class AccountData( val cashout_payto_uri: String? = null, val tan_channel: TanChannel? = null, val is_public: Boolean, - val is_taler_exchange: Boolean + val is_taler_exchange: Boolean, + val status: AccountStatus ) @Serializable diff --git a/bank/src/main/kotlin/tech/libeufin/bank/api/CoreBankApi.kt b/bank/src/main/kotlin/tech/libeufin/bank/api/CoreBankApi.kt index a3bb8265..45689bf0 100644 --- a/bank/src/main/kotlin/tech/libeufin/bank/api/CoreBankApi.kt +++ b/bank/src/main/kotlin/tech/libeufin/bank/api/CoreBankApi.kt @@ -422,7 +422,7 @@ private fun Routing.coreBankAccountsApi(db: Database, ctx: BankConfig) { } private fun Routing.coreBankTransactionsApi(db: Database, ctx: BankConfig) { - auth(db, TokenScope.readonly) { + auth(db, TokenScope.readonly, allowAdmin = true) { get("/accounts/{USERNAME}/transactions") { val params = HistoryParams.extract(call.request.queryParameters) val bankAccount = call.bankInfo(db, ctx.payto) @@ -618,7 +618,7 @@ private fun Routing.coreBankCashoutApi(db: Database, ctx: BankConfig) = conditio } } } - auth(db, TokenScope.readonly) { + auth(db, TokenScope.readonly, allowAdmin = true) { get("/accounts/{USERNAME}/cashouts/{CASHOUT_ID}") { val id = call.longPath("CASHOUT_ID") val cashout = db.cashout.get(id, username) ?: throw notFound( diff --git a/bank/src/main/kotlin/tech/libeufin/bank/db/AccountDAO.kt b/bank/src/main/kotlin/tech/libeufin/bank/db/AccountDAO.kt index 7781d807..a3a5d8e5 100644 --- a/bank/src/main/kotlin/tech/libeufin/bank/db/AccountDAO.kt +++ b/bank/src/main/kotlin/tech/libeufin/bank/db/AccountDAO.kt @@ -436,7 +436,7 @@ class AccountDAO(private val db: Database) { ,is_taler_exchange FROM bank_accounts JOIN customers ON customer_id=owning_customer_id - WHERE login=? AND deleted_at IS NULL + WHERE login=? """) stmt.setString(1, login) stmt.oneOrNull { @@ -465,10 +465,14 @@ class AccountDAO(private val db: Database) { ,(max_debt).frac AS max_debt_frac ,is_public ,is_taler_exchange + ,CASE + WHEN deleted_at IS NOT NULL THEN 'deleted' + ELSE 'active' + END as status FROM customers JOIN bank_accounts ON customer_id=owning_customer_id - WHERE login=? AND deleted_at IS NULL + WHERE login=? """) stmt.setString(1, login) stmt.oneOrNull { @@ -492,7 +496,8 @@ class AccountDAO(private val db: Database) { ), debit_threshold = it.getAmount("max_debt", db.bankCurrency), is_public = it.getBoolean("is_public"), - is_taler_exchange = it.getBoolean("is_taler_exchange") + is_taler_exchange = it.getBoolean("is_taler_exchange"), + status = AccountStatus.valueOf(it.getString("status")) ) } } @@ -555,9 +560,13 @@ class AccountDAO(private val db: Database) { ,is_taler_exchange ,internal_payto_uri ,bank_account_id + ,CASE + WHEN deleted_at IS NOT NULL THEN 'deleted' + ELSE 'active' + END as status FROM bank_accounts JOIN customers ON owning_customer_id = customer_id - WHERE name LIKE ? AND deleted_at IS NULL AND + WHERE name LIKE ? AND """, { setString(1, params.loginFilter) @@ -580,6 +589,7 @@ class AccountDAO(private val db: Database) { is_public = it.getBoolean("is_public"), is_taler_exchange = it.getBoolean("is_taler_exchange"), payto_uri = it.getBankPayto("internal_payto_uri", "name", ctx), + status = AccountStatus.valueOf(it.getString("status")) ) } }
\ No newline at end of file diff --git a/bank/src/main/kotlin/tech/libeufin/bank/db/CashoutDAO.kt b/bank/src/main/kotlin/tech/libeufin/bank/db/CashoutDAO.kt index 45da0854..958d2b33 100644 --- a/bank/src/main/kotlin/tech/libeufin/bank/db/CashoutDAO.kt +++ b/bank/src/main/kotlin/tech/libeufin/bank/db/CashoutDAO.kt @@ -104,7 +104,7 @@ class CashoutDAO(private val db: Database) { JOIN bank_accounts ON bank_account=bank_account_id JOIN customers ON owning_customer_id=customer_id LEFT JOIN bank_account_transactions ON local_transaction=bank_transaction_id - WHERE cashout_id=? AND login=? AND deleted_at IS NULL + WHERE cashout_id=? AND login=? """) stmt.setLong(1, id) stmt.setString(2, login) @@ -134,7 +134,7 @@ class CashoutDAO(private val db: Database) { FROM cashout_operations JOIN bank_accounts ON bank_account=bank_account_id JOIN customers ON owning_customer_id=customer_id - WHERE deleted_at IS NULL AND + WHERE """) { GlobalCashoutInfo( cashout_id = it.getLong("cashout_id"), @@ -150,7 +150,7 @@ class CashoutDAO(private val db: Database) { FROM cashout_operations JOIN bank_accounts ON bank_account=bank_account_id JOIN customers ON owning_customer_id=customer_id - WHERE login = ? AND deleted_at IS NULL AND + WHERE login = ? AND """, bind = { setString(1, login) diff --git a/bank/src/main/kotlin/tech/libeufin/bank/db/TransactionDAO.kt b/bank/src/main/kotlin/tech/libeufin/bank/db/TransactionDAO.kt index e82f0ba2..cf5ef9bc 100644 --- a/bank/src/main/kotlin/tech/libeufin/bank/db/TransactionDAO.kt +++ b/bank/src/main/kotlin/tech/libeufin/bank/db/TransactionDAO.kt @@ -165,7 +165,7 @@ class TransactionDAO(private val db: Database) { FROM bank_account_transactions JOIN bank_accounts ON bank_account_transactions.bank_account_id=bank_accounts.bank_account_id JOIN customers ON customer_id=owning_customer_id - WHERE bank_transaction_id=? AND login=? AND deleted_at IS NULL + WHERE bank_transaction_id=? AND login=? """) stmt.setLong(1, rowId) stmt.setString(2, login) diff --git a/bank/src/main/kotlin/tech/libeufin/bank/db/WithdrawalDAO.kt b/bank/src/main/kotlin/tech/libeufin/bank/db/WithdrawalDAO.kt index 3a41c0d8..4b069339 100644 --- a/bank/src/main/kotlin/tech/libeufin/bank/db/WithdrawalDAO.kt +++ b/bank/src/main/kotlin/tech/libeufin/bank/db/WithdrawalDAO.kt @@ -189,7 +189,7 @@ class WithdrawalDAO(private val db: Database) { FROM taler_withdrawal_operations JOIN bank_accounts ON wallet_bank_account=bank_account_id JOIN customers ON customer_id=owning_customer_id - WHERE withdrawal_uuid=? AND deleted_at IS NULL + WHERE withdrawal_uuid=? """) stmt.setObject(1, uuid) stmt.oneOrNull { it.getString(1) } @@ -250,7 +250,7 @@ class WithdrawalDAO(private val db: Database) { FROM taler_withdrawal_operations JOIN bank_accounts ON wallet_bank_account=bank_account_id JOIN customers ON customer_id=owning_customer_id - WHERE withdrawal_uuid=? AND deleted_at IS NULL + WHERE withdrawal_uuid=? """) stmt.setObject(1, uuid) stmt.oneOrNull { |