gnunet-svn
[Top][All Lists]
Advanced

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

[libeufin] branch master updated: Fetching transactions from the bank.


From: gnunet
Subject: [libeufin] branch master updated: Fetching transactions from the bank.
Date: Mon, 10 Jul 2023 15:12:12 +0200

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

ms pushed a commit to branch master
in repository libeufin.

The following commit(s) were added to refs/heads/master by this push:
     new f1b7567a Fetching transactions from the bank.
f1b7567a is described below

commit f1b7567a31e2a3496fe9d1a6887d3ea599414895
Author: MS <ms@taler.net>
AuthorDate: Mon Jul 10 15:11:26 2023 +0200

    Fetching transactions from the bank.
    
    Nexus can receive time ranges from its JSON interface.
---
 .../kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt     | 18 ++++++++++++++----
 .../src/main/kotlin/tech/libeufin/nexus/server/JSON.kt | 15 +++++++++++++--
 .../libeufin/nexus/xlibeufinbank/XLibeufinBankNexus.kt | 10 +++++++++-
 util/src/main/kotlin/Ebics.kt                          |  5 ++++-
 4 files changed, 40 insertions(+), 8 deletions(-)

diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt 
b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt
index e4f2055f..b1fdf816 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt
@@ -59,10 +59,7 @@ import tech.libeufin.util.ebics_h005.Ebics3Request
 import java.io.ByteArrayOutputStream
 import java.security.interfaces.RSAPrivateCrtKey
 import java.security.interfaces.RSAPublicKey
-import java.time.Instant
-import java.time.LocalDateTime
-import java.time.ZoneOffset
-import java.time.ZonedDateTime
+import java.time.*
 import java.time.format.DateTimeFormatter
 import java.util.*
 import javax.crypto.EncryptedPrivateKeyInfo
@@ -676,6 +673,19 @@ class EbicsBankConnectionProtocol: BankConnectionProtocol {
         }
         // Figuring out what time range to put in the fetch instructions.
         when (fetchSpec) {
+            is FetchSpecTimeRangeJson -> {
+                // the parse() method defaults to the YYYY-MM-DD format.
+                // If parsing fails, the global catcher intervenes.
+                val start: LocalDate = LocalDate.parse(fetchSpec.start)
+                val end: LocalDate = LocalDate.parse(fetchSpec.end)
+                val p = EbicsStandardOrderParams(
+                    EbicsDateRange(
+                        start = 
start.atStartOfDay().atZone(ZoneId.systemDefault()),
+                        end = end.atStartOfDay().atZone(ZoneId.systemDefault())
+                    )
+                )
+                addForLevel(fetchSpec.level, p)
+            }
             is FetchSpecLatestJson -> {
                 val p = EbicsStandardOrderParams()
                 addForLevel(fetchSpec.level, p)
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/server/JSON.kt 
b/nexus/src/main/kotlin/tech/libeufin/nexus/server/JSON.kt
index 074a2589..a0dc6b0c 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/server/JSON.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/server/JSON.kt
@@ -202,11 +202,14 @@ enum class FetchLevel(@get:JsonValue val jsonName: 
String) {
     JsonSubTypes.Type(value = FetchSpecLatestJson::class, name = "latest"),
     JsonSubTypes.Type(value = FetchSpecAllJson::class, name = "all"),
     JsonSubTypes.Type(value = FetchSpecPreviousDaysJson::class, name = 
"previous-days"),
-    JsonSubTypes.Type(value = FetchSpecSinceLastJson::class, name = 
"since-last")
+    JsonSubTypes.Type(value = FetchSpecSinceLastJson::class, name = 
"since-last"),
+    JsonSubTypes.Type(value = FetchSpecTimeRangeJson::class, name = 
"time-range")
 )
 abstract class FetchSpecJson(
     val level: FetchLevel,
-    val bankConnection: String?
+    val bankConnection: String?,
+    val start: String? = null,
+    val end: String? = null
 )
 
 @JsonTypeName("latest")
@@ -218,6 +221,14 @@ class FetchSpecAllJson(level: FetchLevel, bankConnection: 
String?) : FetchSpecJs
 @JsonTypeName("since-last")
 class FetchSpecSinceLastJson(level: FetchLevel, bankConnection: String?) : 
FetchSpecJson(level, bankConnection)
 
+@JsonTypeName("time-range")
+class FetchSpecTimeRangeJson(
+    level: FetchLevel,
+    start: String,
+    end: String,
+    bankConnection: String?
+) : FetchSpecJson(level, bankConnection)
+
 @JsonTypeName("previous-days")
 class FetchSpecPreviousDaysJson(level: FetchLevel, bankConnection: String?, 
val number: Int) :
     FetchSpecJson(level, bankConnection)
diff --git 
a/nexus/src/main/kotlin/tech/libeufin/nexus/xlibeufinbank/XLibeufinBankNexus.kt 
b/nexus/src/main/kotlin/tech/libeufin/nexus/xlibeufinbank/XLibeufinBankNexus.kt
index cd37862a..2bb86643 100644
--- 
a/nexus/src/main/kotlin/tech/libeufin/nexus/xlibeufinbank/XLibeufinBankNexus.kt
+++ 
b/nexus/src/main/kotlin/tech/libeufin/nexus/xlibeufinbank/XLibeufinBankNexus.kt
@@ -27,6 +27,7 @@ import tech.libeufin.nexus.server.*
 import tech.libeufin.util.*
 import java.net.MalformedURLException
 import java.net.URL
+import java.time.LocalDate
 
 // Gets Sandbox URL and credentials, taking the connection name as input.
 fun getXLibeufinBankCredentials(conn: NexusBankConnectionEntity): 
XLibeufinBankTransport {
@@ -235,7 +236,7 @@ class XlibeufinBankConnectionProtocol : 
BankConnectionProtocol {
     }
 
     override suspend fun fetchTransactions(
-        fetchSpec: FetchSpecJson,
+        fetchSpec: FetchSpecJson, // FIXME: handle time range.
         client: HttpClient,
         bankConnectionId: String,
         accountId: String
@@ -261,6 +262,13 @@ class XlibeufinBankConnectionProtocol : 
BankConnectionProtocol {
                 baseUrl.path.dropLastWhile { it == '/' },
                 "accounts/${credentials.username}/transactions")
             when (fetchSpec) {
+                is FetchSpecTimeRangeJson -> {
+                    // the parse() method defaults to the YYYY-MM-DD format.
+                    val start: LocalDate = LocalDate.parse(fetchSpec.start)
+                    val end: LocalDate = LocalDate.parse(fetchSpec.end)
+                    this.parameters["from_ms"] = start.toString()
+                    this.parameters["to_ms"] = end.toString()
+                }
                 // Gets the last 5 transactions
                 is FetchSpecLatestJson -> {
                     // Do nothing, the bare endpoint gets the last 5 txs by 
default.
diff --git a/util/src/main/kotlin/Ebics.kt b/util/src/main/kotlin/Ebics.kt
index f2b669dc..e951016a 100644
--- a/util/src/main/kotlin/Ebics.kt
+++ b/util/src/main/kotlin/Ebics.kt
@@ -58,7 +58,10 @@ data class EbicsProtocolError(
     val ebicsTechnicalCode: EbicsReturnCode? = null
 ) : Exception(reason)
 
-data class EbicsDateRange(val start: ZonedDateTime, val end: ZonedDateTime)
+data class EbicsDateRange(
+    val start: ZonedDateTime,
+    val end: ZonedDateTime
+)
 
 sealed class EbicsOrderParams
 data class EbicsStandardOrderParams(

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

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