gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [taler-exchange] branch master updated: implement #4956-sup


From: gnunet
Subject: [GNUnet-SVN] [taler-exchange] branch master updated: implement #4956-support in exchange db and exchange (to return information about closed reserves)
Date: Wed, 19 Apr 2017 14:40:59 +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 8f98a5c  implement #4956-support in exchange db and exchange (to 
return information about closed reserves)
8f98a5c is described below

commit 8f98a5ca6e651e4361851bf305a77ad2090f0d75
Author: Christian Grothoff <address@hidden>
AuthorDate: Wed Apr 19 14:40:43 2017 +0200

    implement #4956-support in exchange db and exchange (to return information 
about closed reserves)
---
 src/exchange/taler-exchange-httpd_responses.c |   7 +-
 src/exchangedb/plugin_exchangedb_postgres.c   | 103 +++++++++++++++++++++++++-
 2 files changed, 106 insertions(+), 4 deletions(-)

diff --git a/src/exchange/taler-exchange-httpd_responses.c 
b/src/exchange/taler-exchange-httpd_responses.c
index a335e44..049fa8f 100644
--- a/src/exchange/taler-exchange-httpd_responses.c
+++ b/src/exchange/taler-exchange-httpd_responses.c
@@ -886,17 +886,20 @@ compile_reserve_history (const struct 
TALER_EXCHANGEDB_ReserveHistory *rh,
        rcc.reserve_pub = pos->details.closing->reserve_pub;
        TALER_JSON_hash (pos->details.closing->receiver_account_details,
                         &rcc.h_wire);
+       TALER_JSON_hash (pos->details.closing->transfer_details,
+                        &rcc.h_transfer);
        TEH_KS_sign (&rcc.purpose,
                     &pub,
                     &sig);
        GNUNET_assert (0 ==
                       json_array_append_new (json_history,
-                                             json_pack ("{s:s, s:o, s:o, s:o, 
s:o}",
+                                             json_pack ("{s:s, s:O, s:O, s:o, 
s:o, s:o, s:o, s:o}",
                                                         "type", "CLOSING",
+                                                        
"receiver_account_details", pos->details.closing->receiver_account_details,
+                                                        "transfer_details", 
pos->details.closing->transfer_details,
                                                         "exchange_pub", 
GNUNET_JSON_from_data_auto (&pub),
                                                         "exchange_sig", 
GNUNET_JSON_from_data_auto (&sig),
                                                         "timestamp", 
GNUNET_JSON_from_time_abs (pos->details.closing->execution_date),
-                                                        "h_wire", 
GNUNET_JSON_from_data_auto (&rcc.h_wire),
                                                         "amount", 
TALER_JSON_from_amount (&value),
                                                         "closing_fee", 
TALER_JSON_from_amount (&pos->details.closing->closing_fee))));
       }
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c 
b/src/exchangedb/plugin_exchangedb_postgres.c
index 2b977c5..1f2a72a 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -564,6 +564,26 @@ postgres_create_tables (void *cls)
   SQLEXEC_INDEX("CREATE INDEX prepare_iteration_index "
                 "ON prewire(type,finished)");
 
+  /* This table contains the data for
+     wire transfers the exchange has executed
+     to close a reserve. */
+  SQLEXEC("CREATE TABLE IF NOT EXISTS reserve_close "
+          "(close_uuid BIGSERIAL PRIMARY KEY"
+          ",reserve_pub BYTEA NOT NULL REFERENCES reserves (reserve_pub) ON 
DELETE CASCADE"
+         ",execution_date INT8 NOT NULL"
+          ",transfer_details TEXT NOT NULL"
+          ",receiver_account TEXT NOT NULL"
+          ",amount_val INT8 NOT NULL"
+          ",amount_frac INT4 NOT NULL"
+          ",amount_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
+          ",closing_fee_val INT8 NOT NULL"
+          ",closing_fee_frac INT4 NOT NULL"
+          ",closing_fee_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
+          ")");
+
+  SQLEXEC_INDEX("CREATE INDEX reserve_close_by_reserve "
+                "ON reserve_close(reserve_pub)");
+  
 #undef SQLEXEC
 #undef SQLEXEC_INDEX
 
@@ -1508,6 +1528,22 @@ postgres_prepare (PGconn *db_conn)
            " WHERE payback.reserve_pub=$1",
            1, NULL);
 
+  /* Used in #postgres_get_reserve_history() */
+  PREPARE ("close_by_reserve",
+           "SELECT"
+           " amount_val"
+           ",amount_frac"
+           ",amount_curr"
+           ",closing_fee_val"
+           ",closing_fee_frac"
+           ",closing_fee_curr"
+          ",execution_date"
+          ",receiver_account"
+          ",transfer_details"
+           " FROM reserve_close"
+           " WHERE reserve_pub=$1;",
+           1, NULL);
+  
   /* Used in #postgres_get_coin_transactions() to obtain payback transactions
      for a coin */
   PREPARE ("payback_by_coin",
@@ -2444,9 +2480,9 @@ postgres_get_reserve_history (void *cls,
     ret = GNUNET_OK;
     PQclear (result);
   }
+
   /** #TALER_EXCHANGEDB_RO_PAYBACK_COIN */
   {
-    struct TALER_EXCHANGEDB_Payback *payback;
     struct GNUNET_PQ_QueryParam params[] = {
       GNUNET_PQ_query_param_auto_from_type (reserve_pub),
       GNUNET_PQ_query_param_end
@@ -2463,6 +2499,8 @@ postgres_get_reserve_history (void *cls,
     rows = PQntuples (result);
     while (0 < rows)
     {
+      struct TALER_EXCHANGEDB_Payback *payback;
+
       payback = GNUNET_new (struct TALER_EXCHANGEDB_Payback);
       {
         struct GNUNET_PQ_ResultSpec rs[] = {
@@ -2512,8 +2550,69 @@ postgres_get_reserve_history (void *cls,
 
 
   /** #TALER_EXCHANGEDB_RO_EXCHANGE_TO_BANK */
-  /* TODO: #4956 */
+  {
+    struct GNUNET_PQ_QueryParam params[] = {
+      GNUNET_PQ_query_param_auto_from_type (reserve_pub),
+      GNUNET_PQ_query_param_end
+    };
+
+    result = GNUNET_PQ_exec_prepared (session->conn,
+                                      "close_by_reserve",
+                                      params);
+    if (PGRES_TUPLES_OK != PQresultStatus (result))
+    {
+      QUERY_ERR (result, session->conn);
+      goto cleanup;
+    }
+    rows = PQntuples (result);
+    while (0 < rows)
+    {
+      struct TALER_EXCHANGEDB_ClosingTransfer *closing;
+
+      closing = GNUNET_new (struct TALER_EXCHANGEDB_ClosingTransfer);
+      {
+        struct GNUNET_PQ_ResultSpec rs[] = {
+          TALER_PQ_result_spec_amount ("amount",
+                                       &closing->amount),
+          TALER_PQ_result_spec_amount ("closing_fee",
+                                       &closing->closing_fee),
+          GNUNET_PQ_result_spec_absolute_time ("execution_date",
+                                               &closing->execution_date),
+          TALER_PQ_result_spec_json ("receiver_account",
+                                    &closing->receiver_account_details),
+          TALER_PQ_result_spec_json ("transfer_details",
+                                    &closing->transfer_details),
+          GNUNET_PQ_result_spec_end
+        };
+        if (GNUNET_OK !=
+            GNUNET_PQ_extract_result (result,
+                                      rs,
+                                      --rows))
+        {
+          GNUNET_break (0);
+          GNUNET_free (closing);
+          PQclear (result);
+          goto cleanup;
+        }
+      }
+      closing->reserve_pub = *reserve_pub;
+      if (NULL != rh_tail)
+      {
+        rh_tail->next = GNUNET_new (struct TALER_EXCHANGEDB_ReserveHistory);
+        rh_tail = rh_tail->next;
+      }
+      else
+      {
+        rh_tail = GNUNET_new (struct TALER_EXCHANGEDB_ReserveHistory);
+        rh = rh_tail;
+      }
+      rh_tail->type = TALER_EXCHANGEDB_RO_EXCHANGE_TO_BANK;
+      rh_tail->details.closing = closing;
+    } /* end of 'while (0 < rows)' */
+    PQclear (result);
+  }
 
+  
  cleanup:
   if (GNUNET_SYSERR == ret)
   {

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



reply via email to

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