commit 0546e80049a72fce9fb9a1a79423634d5bb31fc1
parent fec2ef057222d3f2a9c2784c8d45a42a48ad6fb0
Author: Antoine A <>
Date: Fri, 24 Nov 2023 21:13:58 +0000
Fix conversion info API /config crash
Diffstat:
4 files changed, 22 insertions(+), 15 deletions(-)
diff --git a/bank/src/main/kotlin/tech/libeufin/bank/TalerMessage.kt b/bank/src/main/kotlin/tech/libeufin/bank/TalerMessage.kt
@@ -228,7 +228,9 @@ data class Config(
) {
val name: String = "libeufin-bank"
val version: String = "0:0:0"
+ // TODO as a config field
val bank_name: String = "Stater Bank"
+ // TODO spa file config ?
val show_demo_nav: Boolean = false
}
diff --git a/bank/src/main/kotlin/tech/libeufin/bank/db/ConversionDAO.kt b/bank/src/main/kotlin/tech/libeufin/bank/db/ConversionDAO.kt
@@ -65,28 +65,30 @@ class ConversionDAO(private val db: Database) {
/** Get in-db conversion config */
suspend fun getConfig(regional: String, fiat: String): ConversionRate? = db.conn {
it.transaction { conn ->
+ val check = conn.prepareStatement("select exists(select 1 from config where key='cashin_ratio')").oneOrNull { it.getBoolean(1) }!!
+ if (!check) return@transaction null
val amount = conn.prepareStatement("SELECT (amount).val as amount_val, (amount).frac as amount_frac FROM config_get_amount(?) as amount");
val roundingMode = conn.prepareStatement("SELECT config_get_rounding_mode(?)");
- fun getAmount(name: String, currency: String): TalerAmount? {
+ fun getAmount(name: String, currency: String): TalerAmount {
amount.setString(1, name)
- return amount.oneOrNull { it.getAmount("amount", currency) }
+ return amount.oneOrNull { it.getAmount("amount", currency) }!!
}
- fun getRatio(name: String): DecimalNumber? = getAmount(name, "")?.run { DecimalNumber(value, frac) }
- fun getMode(name: String): RoundingMode? {
+ fun getRatio(name: String): DecimalNumber = getAmount(name, "").run { DecimalNumber(value, frac) }
+ fun getMode(name: String): RoundingMode {
roundingMode.setString(1, name)
- return roundingMode.oneOrNull { RoundingMode.valueOf(it.getString(1)) }
+ return roundingMode.oneOrNull { RoundingMode.valueOf(it.getString(1)) }!!
}
ConversionRate(
- cashin_ratio = getRatio("cashin_ratio") ?: return@transaction null,
- cashin_fee = getAmount("cashin_fee", regional) ?: return@transaction null,
- cashin_tiny_amount = getAmount("cashin_tiny_amount", regional) ?: return@transaction null,
- cashin_rounding_mode = getMode("cashin_rounding_mode") ?: return@transaction null,
- cashin_min_amount = getAmount("cashin_min_amount", fiat) ?: return@transaction null,
- cashout_ratio = getRatio("cashout_ratio") ?: return@transaction null,
- cashout_fee = getAmount("cashout_fee", fiat) ?: return@transaction null,
- cashout_tiny_amount = getAmount("cashout_tiny_amount", fiat) ?: return@transaction null,
- cashout_rounding_mode = getMode("cashout_rounding_mode") ?: return@transaction null,
- cashout_min_amount = getAmount("cashout_min_amount", regional) ?: return@transaction null,
+ cashin_ratio = getRatio("cashin_ratio"),
+ cashin_fee = getAmount("cashin_fee", regional),
+ cashin_tiny_amount = getAmount("cashin_tiny_amount", regional),
+ cashin_rounding_mode = getMode("cashin_rounding_mode"),
+ cashin_min_amount = getAmount("cashin_min_amount", fiat),
+ cashout_ratio = getRatio("cashout_ratio"),
+ cashout_fee = getAmount("cashout_fee", fiat),
+ cashout_tiny_amount = getAmount("cashout_tiny_amount", fiat),
+ cashout_rounding_mode = getMode("cashout_rounding_mode"),
+ cashout_min_amount = getAmount("cashout_min_amount", regional),
)
}
}
diff --git a/bank/src/test/kotlin/ConversionApiTest.kt b/bank/src/test/kotlin/ConversionApiTest.kt
@@ -111,6 +111,8 @@ class ConversionApiTest {
@Test
fun noRate() = bankSetup { db ->
db.conversion.clearConfig()
+ client.get("/conversion-info/config")
+ .assertNotImplemented()
client.get("/conversion-info/cashin-rate")
.assertBadRequest()
client.get("/conversion-info/cashout-rate")
diff --git a/database-versioning/libeufin-conversion-setup.sql b/database-versioning/libeufin-conversion-setup.sql
@@ -8,6 +8,7 @@ LANGUAGE plpgsql AS $$
now_date BIGINT;
payto_uri TEXT;
BEGIN
+ -- TODO should send to an exchange
IF NEW.local_transaction IS NOT NULL THEN
SELECT transaction_date INTO now_date
FROM libeufin_bank.bank_account_transactions