gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: -complete purses_get draft imple


From: gnunet
Subject: [taler-exchange] branch master updated: -complete purses_get draft implementation
Date: Tue, 26 Apr 2022 13:34:22 +0200

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

grothoff pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new 932cef3d -complete purses_get draft implementation
932cef3d is described below

commit 932cef3d8cd5d569a8847d8fadf73165ff95cfc3
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Tue Apr 26 13:34:18 2022 +0200

    -complete purses_get draft implementation
---
 src/exchange/taler-exchange-httpd_purses_get.c | 42 +++++++++++++------------
 src/exchangedb/plugin_exchangedb_postgres.c    | 43 +++++++++++++-------------
 src/include/taler_exchangedb_plugin.h          |  4 +--
 3 files changed, 45 insertions(+), 44 deletions(-)

diff --git a/src/exchange/taler-exchange-httpd_purses_get.c 
b/src/exchange/taler-exchange-httpd_purses_get.c
index 32527288..ca24adbe 100644
--- a/src/exchange/taler-exchange-httpd_purses_get.c
+++ b/src/exchange/taler-exchange-httpd_purses_get.c
@@ -71,11 +71,6 @@ struct GetContext
    */
   struct GNUNET_TIME_Timestamp merge_timestamp;
 
-  /**
-   * When was the full amount deposited into this purse?
-   */
-  struct GNUNET_TIME_Timestamp deposit_timestamp;
-
   /**
    * How much is the purse (supposed) to be worth?
    */
@@ -304,8 +299,7 @@ TEH_handler_purses_get (struct TEH_RequestContext *rc,
                                    &gc->amount,
                                    &gc->deposited,
                                    &gc->h_contract,
-                                   &gc->merge_timestamp,
-                                   &gc->deposit_timestamp);
+                                   &gc->merge_timestamp);
     switch (qs)
     {
     case GNUNET_DB_STATUS_HARD_ERROR:
@@ -343,9 +337,11 @@ TEH_handler_purses_get (struct TEH_RequestContext *rc,
 
   if (GNUNET_TIME_absolute_is_future (gc->timeout) &&
       ( ((gc->wait_for_merge) &&
-         GNUNET_TIME_absolute_is_zero (gc->merge_timestamp.abs_time)) ||
+         GNUNET_TIME_absolute_is_never (gc->merge_timestamp.abs_time)) ||
         ((! gc->wait_for_merge) &&
-         GNUNET_TIME_absolute_is_zero (gc->deposit_timestamp.abs_time)) ))
+         (0 <
+          TALER_amount_cmp (&gc->amount,
+                            &gc->deposited))) ) )
   {
     gc->suspended = true;
     GNUNET_CONTAINER_DLL_insert (gc_head,
@@ -355,16 +351,24 @@ TEH_handler_purses_get (struct TEH_RequestContext *rc,
     return MHD_YES;
   }
 
-  // FIXME: add exchange signature!?
-  // FIXME: return amount?
-  res = TALER_MHD_REPLY_JSON_PACK (
-    rc->connection,
-    MHD_HTTP_OK,
-    GNUNET_JSON_pack_timestamp ("merge_timestamp",
-                                gc->merge_timestamp),
-    GNUNET_JSON_pack_timestamp ("deposit_timestamp",
-                                gc->deposit_timestamp)
-    );
+  {
+    struct GNUNET_TIME_Timestamp dt = GNUNET_TIME_timestamp_get ();
+
+    if (GNUNET_TIME_timestamp_cmp (dt,
+                                   >,
+                                   gc->purse_expiration))
+      dt = gc->purse_expiration;
+    // FIXME: add exchange signature!?
+    // FIXME: return amount?
+    res = TALER_MHD_REPLY_JSON_PACK (
+      rc->connection,
+      MHD_HTTP_OK,
+      GNUNET_JSON_pack_timestamp ("merge_timestamp",
+                                  gc->merge_timestamp),
+      GNUNET_JSON_pack_timestamp ("deposit_timestamp",
+                                  dt)
+      );
+  }
   return res;
 }
 
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c 
b/src/exchangedb/plugin_exchangedb_postgres.c
index af4cbc78..8091cba4 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -3470,6 +3470,22 @@ prepare_statements (struct PostgresClosure *pg)
       "  ($1, $2, $3, $4, $5, $6, $7, $8)"
       "  ON CONFLICT DO NOTHING;",
       8),
+    /* Used in #postgres_select_purse */
+    GNUNET_PQ_make_prepare (
+      "select_purse",
+      "SELECT "
+      " merge_pub"
+      ",purse_expiration"
+      ",h_contract_terms"
+      ",amount_with_fee_val"
+      ",amount_with_fee_frac"
+      ",balance_val"
+      ",balance_frac"
+      ",merge_timestamp"
+      " FROM purse_requests"
+      " WHERE purse_pub=$1"
+      " LEFT JOIN purse_merges ON (purse_pub);",
+      1),
     /* Used in #postgres_select_purse_request */
     GNUNET_PQ_make_prepare (
       "select_purse_request",
@@ -13361,7 +13377,6 @@ postgres_insert_purse_request (
  * @param[out] deposited set to actual amount put into the purse so far
  * @param[out] h_contract_terms set to hash of the contract for the purse
  * @param[out] merge_timestamp set to time when the purse was merged, or NEVER 
if not
- * @param[out] deposit_timestamp set to time when the deposited amount reached 
the target amount, or NEVER if not
  * @return transaction status code
  */
 static enum GNUNET_DB_QueryStatus
@@ -13372,8 +13387,7 @@ postgres_select_purse (
   struct TALER_Amount *amount,
   struct TALER_Amount *deposited,
   struct TALER_PrivateContractHashP *h_contract_terms,
-  struct GNUNET_TIME_Timestamp *merge_timestamp,
-  struct GNUNET_TIME_Timestamp *deposit_timestamp)
+  struct GNUNET_TIME_Timestamp *merge_timestamp)
 {
   struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
@@ -13393,29 +13407,14 @@ postgres_select_purse (
       GNUNET_PQ_result_spec_timestamp ("merge_timestamp",
                                        merge_timestamp),
       NULL),
-    GNUNET_PQ_result_spec_allow_null (
-      GNUNET_PQ_result_spec_timestamp ("deposit_timestamp",
-                                       deposit_timestamp),
-      NULL),
     GNUNET_PQ_result_spec_end
   };
-  enum GNUNET_DB_QueryStatus qs;
 
   *merge_timestamp = GNUNET_TIME_UNIT_FOREVER_TS;
-  *deposit_timestamp = GNUNET_TIME_UNIT_FOREVER_TS;
-  qs = GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
-                                                 "select_purse_request",
-                                                 params,
-                                                 rs);
-  if ( (qs > 0) &&
-       (0 <
-        TALER_amount_cmp (amount,
-                          deposited)) )
-  {
-    /* not yet enough */
-    *deposit_timestamp = GNUNET_TIME_UNIT_FOREVER_TS;
-  }
-  return qs;
+  return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
+                                                   "select_purse",
+                                                   params,
+                                                   rs);
 }
 
 
diff --git a/src/include/taler_exchangedb_plugin.h 
b/src/include/taler_exchangedb_plugin.h
index 27b0d1b0..b347ac56 100644
--- a/src/include/taler_exchangedb_plugin.h
+++ b/src/include/taler_exchangedb_plugin.h
@@ -4556,7 +4556,6 @@ struct TALER_EXCHANGEDB_Plugin
    * @param[out] deposited set to actual amount put into the purse so far
    * @param[out] h_contract_terms set to hash of the contract for the purse
    * @param[out] merge_timestamp set to time when the purse was merged, or 
NEVER if not
-   * @param[out] deposit_timestamp set to time when the deposited amount 
reached the target amount, or NEVER if not
    * @return transaction status code
    */
   enum GNUNET_DB_QueryStatus
@@ -4567,8 +4566,7 @@ struct TALER_EXCHANGEDB_Plugin
     struct TALER_Amount *amount,
     struct TALER_Amount *deposited,
     struct TALER_PrivateContractHashP *h_contract_terms,
-    struct GNUNET_TIME_Timestamp *merge_timestamp,
-    struct GNUNET_TIME_Timestamp *deposit_timestamp);
+    struct GNUNET_TIME_Timestamp *merge_timestamp);
 
 
   /**

-- 
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]