gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [taler-merchant] branch master updated: add cherry-pick lik


From: gnunet
Subject: [GNUnet-SVN] [taler-merchant] branch master updated: add cherry-pick like query used in /history. This API is used when the backoffice user enters the exact order id into the form.
Date: Mon, 24 Apr 2017 15:01:02 +0200

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

marcello pushed a commit to branch master
in repository merchant.

The following commit(s) were added to refs/heads/master by this push:
     new c834ea4  add cherry-pick like query used in /history.  This API is 
used when the backoffice user enters the exact order id into the form.
c834ea4 is described below

commit c834ea48dd18334d476067a99720b80fd37680ee
Author: Marcello Stanisci <address@hidden>
AuthorDate: Mon Apr 24 14:59:53 2017 +0200

    add cherry-pick like query used in /history.  This API
    is used when the backoffice user enters the exact order id
    into the form.
---
 src/backend/taler-merchant-httpd_history.c | 28 ++++++++++++
 src/backenddb/plugin_merchantdb_postgres.c | 71 ++++++++++++++++++++++++++++++
 src/backenddb/test_merchantdb.c            | 11 ++++-
 src/include/taler_merchantdb_plugin.h      | 20 +++++++++
 4 files changed, 128 insertions(+), 2 deletions(-)

diff --git a/src/backend/taler-merchant-httpd_history.c 
b/src/backend/taler-merchant-httpd_history.c
index f863a23..fb0c0cc 100644
--- a/src/backend/taler-merchant-httpd_history.c
+++ b/src/backend/taler-merchant-httpd_history.c
@@ -141,6 +141,34 @@ MH_handler_history (struct TMH_RequestHandler *rh,
                                          "instance");
   }
 
+  /* Here goes the cherry-picking logic */
+  
+  str = MHD_lookup_connection_value (connection,
+                                     MHD_GET_ARGUMENT_KIND,
+                                     "order_id");
+
+  if (NULL != str)
+  {
+
+    ret = db->find_proposal_data_history (db->cls,
+                                          str,
+                                          &mi->pubkey,
+                                          pd_cb,
+                                          response);
+    if (GNUNET_SYSERR == ret)
+    {
+      json_decref (response);
+      return TMH_RESPONSE_reply_internal_error (connection,
+                                                
TALER_EC_HISTORY_DB_FETCH_ERROR,
+                                               "db error to get history");
+    }
+    ret = TMH_RESPONSE_reply_json (connection,
+                                   response,
+                                   MHD_HTTP_OK);
+    json_decref (response);
+    return ret;
+  }
+
   delta = 20;
 
   str = MHD_lookup_connection_value (connection,
diff --git a/src/backenddb/plugin_merchantdb_postgres.c 
b/src/backenddb/plugin_merchantdb_postgres.c
index f0e9138..0f2ed73 100644
--- a/src/backenddb/plugin_merchantdb_postgres.c
+++ b/src/backenddb/plugin_merchantdb_postgres.c
@@ -831,6 +831,76 @@ postgres_store_transfer_to_proof (void *cls,
 }
 
 /**
+ * Lookup for a proposal, respecting the signature used by the
+ * /history's db methods.
+ *
+ * @param cls db plugin handle
+ * @param order_id order id used to search for the proposal data
+ * @param merchant_pub public key of the merchant using this method
+ * @param cb the callback
+ * @param cb_cls closure to pass to the callback
+ * @return GNUNET_YES, GNUNET_NO, GNUNET_SYSERR according to the
+ * query being successful, unsuccessful, or generated errors.
+ */
+static int
+postgres_find_proposal_data_history (void *cls,
+                                     const char *order_id,
+                                     const struct TALER_MerchantPublicKeyP 
*merchant_pub,
+                                     TALER_MERCHANTDB_ProposalDataCallback cb,
+                                     void *cb_cls)
+{
+  struct PostgresClosure *pg = cls;
+  PGresult *result;
+  unsigned int i;
+  json_t *proposal_data;
+
+  struct GNUNET_PQ_QueryParam params[] = {
+    GNUNET_PQ_query_param_string (order_id),
+    GNUNET_PQ_query_param_auto_from_type (merchant_pub),
+    GNUNET_PQ_query_param_end
+  };
+
+  result = GNUNET_PQ_exec_prepared (pg->conn,
+                                    "find_proposal_data",
+                                    params);
+  i = PQntuples (result);
+  if (1 < i)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "Mupltiple proposal data share the same hashcode.\n");
+    return GNUNET_SYSERR;
+  }
+
+  if (0 == i)
+    return GNUNET_NO;
+
+  struct GNUNET_PQ_ResultSpec rs[] = {
+    TALER_PQ_result_spec_json ("proposal_data",
+                               &proposal_data),
+    GNUNET_PQ_result_spec_end
+  };
+  if (GNUNET_OK !=
+      GNUNET_PQ_extract_result (result,
+                                rs,
+                                0))
+  {
+    GNUNET_break (0);
+    PQclear (result);
+    return GNUNET_SYSERR;
+  }
+
+  cb (cb_cls,
+      order_id,
+      0,
+      proposal_data);
+
+  PQclear (result);
+  return GNUNET_OK;
+
+}                                     
+
+
+/**
  * Return proposals whose timestamp are older than `date`.
  * Among those proposals, only those ones being between the
  * start-th and (start-nrows)-th record are returned.  The rows
@@ -1597,6 +1667,7 @@ libtaler_plugin_merchantdb_postgres_init (void *cls)
   plugin->find_proof_by_wtid = &postgres_find_proof_by_wtid;
   plugin->insert_proposal_data = &postgres_insert_proposal_data;
   plugin->find_proposal_data = &postgres_find_proposal_data;
+  plugin->find_proposal_data_history = &postgres_find_proposal_data_history;
   plugin->find_proposal_data_by_date = &postgres_find_proposal_data_by_date;
   plugin->find_proposal_data_by_date_and_range = 
&postgres_find_proposal_data_by_date_and_range;
   plugin->find_proposal_data_from_hash = 
&postgres_find_proposal_data_from_hash;
diff --git a/src/backenddb/test_merchantdb.c b/src/backenddb/test_merchantdb.c
index c65f800..011ec9e 100644
--- a/src/backenddb/test_merchantdb.c
+++ b/src/backenddb/test_merchantdb.c
@@ -376,13 +376,20 @@ run (void *cls)
 
   FAILIF (GNUNET_OK !=
           plugin->find_proposal_data (plugin->cls,
-                                      &out, // plain data
+                                      &out,
                                       order_id,
                                       &merchant_pub));
 
   FAILIF (GNUNET_OK !=
+          plugin->find_proposal_data_history (plugin->cls,
+                                              order_id,
+                                              &merchant_pub,
+                                              pd_cb,
+                                              NULL));
+
+  FAILIF (GNUNET_OK !=
           plugin->find_proposal_data_from_hash (plugin->cls,
-                                                &out, // plain data
+                                                &out,
                                                 &h_proposal_data2,
                                                 &merchant_pub));
   FAILIF (1 !=
diff --git a/src/include/taler_merchantdb_plugin.h 
b/src/include/taler_merchantdb_plugin.h
index f0b8ccb..71f1400 100644
--- a/src/include/taler_merchantdb_plugin.h
+++ b/src/include/taler_merchantdb_plugin.h
@@ -243,6 +243,26 @@ struct TALER_MERCHANTDB_Plugin
                                            void *cb_cls);
 
   /**
+   * Lookup for a proposal, respecting the signature used by the
+   * /history's db methods.
+   *
+   * @param cls db plugin handle
+   * @param order_id order id used to search for the proposal data
+   * @param merchant_pub public key of the merchant using this method
+   * @param cb the callback
+   * @param cb_cls closure to pass to the callback
+   * @return GNUNET_YES, GNUNET_NO, GNUNET_SYSERR according to the
+   * query being successful, unsuccessful, or generated errors.
+   */
+  int
+  (*find_proposal_data_history) (void *cls,
+                                 const char *order_id,
+                                 const struct TALER_MerchantPublicKeyP 
*merchant_pub,
+                                 TALER_MERCHANTDB_ProposalDataCallback cb,
+                                 void *cb_cls);
+
+
+  /**
    * Return proposals whose timestamp are older than `date`.
    * The rows are sorted having the youngest first.*
    *

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



reply via email to

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