[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [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.,
gnunet <=