gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libeufin] branch master updated: Amount format.


From: gnunet
Subject: [libeufin] branch master updated: Amount format.
Date: Wed, 04 Dec 2019 21:17:16 +0100

This is an automated email from the git hooks/post-receive script.

marcello pushed a commit to branch master
in repository libeufin.

The following commit(s) were added to refs/heads/master by this push:
     new 48f777a  Amount format.
48f777a is described below

commit 48f777aaaec036dc06083cc34cd1160898e67a9e
Author: Marcello Stanisci <address@hidden>
AuthorDate: Wed Dec 4 21:15:57 2019 +0100

    Amount format.
    
    No need to use value/fraction pairs to represent amounts,
    at least for the moment.  Using floats for now.
---
 .gitignore                                         |  1 +
 sandbox/build.gradle                               |  7 ++++-
 .../src/main/kotlin/tech/libeufin/sandbox/DB.kt    | 28 ++++---------------
 .../src/main/kotlin/tech/libeufin/sandbox/Main.kt  | 29 +++++++++-----------
 sandbox/src/main/python/libeufin-cli               | 32 ++++++++++++++++++++--
 sandbox/src/test/kotlin/DbTest.kt                  | 31 ++++++++++++---------
 6 files changed, 72 insertions(+), 56 deletions(-)

diff --git a/.gitignore b/.gitignore
index 8425854..beb8613 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@ build
 .gradle
 out
 *.sqlite3
+*.swp
diff --git a/sandbox/build.gradle b/sandbox/build.gradle
index b02a96b..f96a44a 100644
--- a/sandbox/build.gradle
+++ b/sandbox/build.gradle
@@ -9,7 +9,9 @@ sourceCompatibility = "11"
 targetCompatibility = "11"
 version '1.0-snapshot'
 
+
 compileKotlin {
+
     kotlinOptions {
         jvmTarget = "11"
     }
@@ -46,12 +48,15 @@ dependencies {
     testImplementation 'org.jetbrains.kotlin:kotlin-test:1.3.50'
 }
 
+
 application {
+
     mainClassName = "tech.libeufin.sandbox.MainKt"
 }
 
+
 jar {
     manifest {
         attributes "Main-Class": "tech.libeufin.sandbox.MainKt"
     }
-}
+}
\ No newline at end of file
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt 
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt
index 5d3251b..e10e1e2 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt
@@ -90,22 +90,6 @@ fun Blob.toByteArray(): ByteArray {
     return this.binaryStream.readAllBytes()
 }
 
-object BalancesTable : IntIdTable() {
-    // Customer ID is the default 'id' field provided by the constructor.
-    val value = integer("value")
-    val fraction = integer("fraction").check {
-        LessEqOp(it, intParam(100))
-    } // enforcing fractional values to be up to 100
-
-}
-
-class BalanceEntity(id: EntityID<Int>) : IntEntity(id) {
-    companion object : IntEntityClass<BalanceEntity>(BalancesTable)
-
-    var value by BalancesTable.value
-    var fraction by BalancesTable.fraction
-}
-
 /**
  * This table information *not* related to EBICS, for all
  * its customers.
@@ -113,13 +97,13 @@ class BalanceEntity(id: EntityID<Int>) : IntEntity(id) {
 object BankCustomersTable : IntIdTable() {
     // Customer ID is the default 'id' field provided by the constructor.
     val name = varchar("name", CUSTOMER_NAME_MAX_LENGTH).primaryKey()
-    val balance = reference("balance", BalancesTable)
+    val balance = float("balance")
 }
 
 class BankCustomerEntity(id: EntityID<Int>) : IntEntity(id) {
     companion object : IntEntityClass<BankCustomerEntity>(BankCustomersTable)
     var name by BankCustomersTable.name
-    var balance by BalanceEntity referencedOn BankCustomersTable.balance
+    var balance by BankCustomersTable.balance
 }
 
 /**
@@ -130,7 +114,6 @@ object EbicsSubscriberPublicKeysTable : IntIdTable() {
     val state = enumeration("state", KeyState::class)
 }
 
-
 /**
  * Definition of a row in the [EbicsSubscriberPublicKeyEntity] table
  */
@@ -177,9 +160,10 @@ object EbicsSubscribersTable : IntIdTable() {
     val nextOrderID = integer("nextOrderID")
 
     val state = enumeration("state", SubscriberState::class)
-    val balance = reference("balance", BalancesTable)
+    val bankCustomer = reference("bankCustomer", BankCustomersTable)
 }
 
+
 class EbicsSubscriberEntity(id: EntityID<Int>) : IntEntity(id) {
     companion object : 
IntEntityClass<EbicsSubscriberEntity>(EbicsSubscribersTable)
 
@@ -192,9 +176,8 @@ class EbicsSubscriberEntity(id: EntityID<Int>) : 
IntEntity(id) {
     var authenticationKey by EbicsSubscriberPublicKeyEntity 
optionalReferencedOn EbicsSubscribersTable.authenticationKey
 
     var nextOrderID by EbicsSubscribersTable.nextOrderID
-
     var state by EbicsSubscribersTable.state
-    var balance by BalanceEntity referencedOn EbicsSubscribersTable.balance
+    var bankCustomer by BankCustomerEntity referencedOn 
EbicsSubscribersTable.bankCustomer
 }
 
 
@@ -297,7 +280,6 @@ fun dbCreateTables() {
         // addLogger(StdOutSqlLogger)
 
         SchemaUtils.createMissingTablesAndColumns(
-            BalancesTable,
             BankCustomersTable,
             EbicsSubscribersTable,
             EbicsHostsTable,
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt 
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
index b774b44..0426d08 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
@@ -17,6 +17,7 @@
  * <http://www.gnu.org/licenses/>
  */
 
+
 package tech.libeufin.sandbox
 
 import io.ktor.application.ApplicationCallPipeline
@@ -42,7 +43,6 @@ import org.jetbrains.exposed.sql.transactions.transaction
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory
 import org.w3c.dom.Document
-import java.lang.NumberFormatException
 import java.security.interfaces.RSAPublicKey
 import java.text.DateFormat
 import javax.sql.rowset.serial.SerialBlob
@@ -92,7 +92,6 @@ data class Subscriber(
     val keys: SubscriberKeys
 )
 
-
 data class SubscriberKeys(
     val authenticationPublicKey: RSAPublicKey,
     val encryptionPublicKey: RSAPublicKey,
@@ -128,21 +127,20 @@ fun main() {
             signaturePrivateKey = SerialBlob(pairC.private.encoded)
         }
 
+
         val customerEntity = BankCustomerEntity.new {
             name = "Mina"
-            balance = BalanceEntity.new {
-                value = 0
-                fraction = 99
+            balance = 0.toFloat()
             }
-        }
 
-        val subscriber = EbicsSubscriberEntity.new {
+
+        EbicsSubscriberEntity.new {
             partnerId = "PARTNER1"
             userId = "USER1"
             systemId = null
             state = SubscriberState.NEW
             nextOrderID = 1
-            balance = customerEntity.balance
+            bankCustomer = customerEntity
         }
     }
 
@@ -170,18 +168,17 @@ fun main() {
         routing {
 
             get("/{id}/balance") {
-                val (name, value, fraction) = transaction {
+                val (name, balanceFloat) = transaction {
                     val tmp = findCustomer(call.parameters["id"])
-                    Triple(tmp.name, tmp.balance.value, tmp.balance.fraction)
+                    Pair(tmp.name, tmp.balance)
                 }
-                call.respond(CustomerBalance(
+                call.respond(
+                    CustomerBalance(
                     name = name,
-                    balance = "EUR:${value}.${fraction}"
-                ))
+                    balance = "EUR:${balanceFloat}"
+                    )
+                )
             }
-
-
-            //trace { logger.info(it.buildText()) }
             get("/") {
                 call.respondText("Hello LibEuFin!\n", ContentType.Text.Plain)
             }
diff --git a/sandbox/src/main/python/libeufin-cli 
b/sandbox/src/main/python/libeufin-cli
index 57a2182..18bae3f 100755
--- a/sandbox/src/main/python/libeufin-cli
+++ b/sandbox/src/main/python/libeufin-cli
@@ -14,10 +14,15 @@ from getpass import getpass
 @click.group()
 @click.option(
     "--base-url", default="http://localhost:5001/";,
-    help="Base URL of the nexus (defaults to http://localhost:5001/)")
+    help="Base URL of the nexus (defaults to http://localhost:5001/)"
+)
+@click.option(
+    "--bank-base-url", default="http://localhost:5000/";,
+    help="Base URL of the bank (defaults to http://localhost:5000/)"
+)
 @click.pass_context
-def cli(ctx, base_url):
-    ctx.obj = dict(base_url=base_url)
+def cli(ctx, base_url, bank_base_url):
+    ctx.obj = dict(base_url=base_url, bank_base_url=bank_base_url)
 
 @cli.group()
 def ebics():
@@ -290,4 +295,25 @@ def new(obj, user_id, partner_id, system_id, host_id, 
ebics_url):
 
     print(resp.content.decode("utf-8"))
 
+
+@ebics.command(help="Ask the balance for a given customer of the bank")
+@click.pass_obj
+@click.option(
+    "--user-id",
+    help="ID of the bank customer (no EBICS correlation implied/needed)" ,
+    required=False,
+    default=1
+)
+def balance(obj, user_id):
+    
+    url = urljoin(obj["bank_base_url"], f"/{user_id}/balance")
+    print(url)
+    try:
+        resp = get(url)
+    except Exception:
+        print("Could not reach the bank")
+        return
+
+    print(resp.content.decode("utf-8"))
+
 cli()
diff --git a/sandbox/src/test/kotlin/DbTest.kt 
b/sandbox/src/test/kotlin/DbTest.kt
index fbcfac8..1744e33 100644
--- a/sandbox/src/test/kotlin/DbTest.kt
+++ b/sandbox/src/test/kotlin/DbTest.kt
@@ -16,23 +16,28 @@ class DbTest {
         Database.connect("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", driver = 
"org.h2.Driver")
 
         transaction {
-            SchemaUtils.create(BalancesTable)
-        }
 
-        assertFailsWith<ExposedSQLException> {
-            transaction {
-                BalanceEntity.new {
-                    value = 101
-                    fraction = 101
-                }
+            SchemaUtils.create(BankCustomersTable)
+            SchemaUtils.create(EbicsSubscribersTable)
+            SchemaUtils.create(EbicsSubscriberPublicKeysTable)
+
+            val customer = BankCustomerEntity.new {
+                name = "username"
+                balance = Float.MIN_VALUE
             }
-        }
 
-        transaction {
-            BalanceEntity.new {
-                value = 101
-                fraction = 100
+            val row = EbicsSubscriberEntity.new {
+                userId = "user id"
+                partnerId = "partner id"
+                nextOrderID = 0
+                state = SubscriberState.NEW
+                bankCustomer = customer
             }
+
+            customer.balance = 100.toFloat()
+
+            logger.info("${row.bankCustomer.balance}")
+            assertTrue(row.bankCustomer.balance.equals(100.toFloat()))
         }
     }
 }
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]