aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Blättler <blatc2@bfh.ch>2024-04-18 15:01:13 +0200
committerChristian Blättler <blatc2@bfh.ch>2024-04-18 15:01:13 +0200
commitb15e3ce135f51d29d64864f2fdd227326a299947 (patch)
tree4f534aed8d590220e2701c2c0b19255e24ba182e
parentf76afc11f45e16eab755e66b741acdfd2789f9e4 (diff)
add choice_index to private get orders id
-rw-r--r--src/backend/taler-merchant-httpd_private-delete-orders-ID.c5
-rw-r--r--src/backend/taler-merchant-httpd_private-get-orders-ID.c26
-rw-r--r--src/backenddb/pg_lookup_contract_terms3.c15
-rw-r--r--src/backenddb/pg_lookup_contract_terms3.h6
-rw-r--r--src/include/taler_merchantdb_plugin.h4
5 files changed, 49 insertions, 7 deletions
diff --git a/src/backend/taler-merchant-httpd_private-delete-orders-ID.c b/src/backend/taler-merchant-httpd_private-delete-orders-ID.c
index cd8aa10c..625b7b6b 100644
--- a/src/backend/taler-merchant-httpd_private-delete-orders-ID.c
+++ b/src/backend/taler-merchant-httpd_private-delete-orders-ID.c
@@ -20,6 +20,7 @@
*/
#include "platform.h"
#include "taler-merchant-httpd_private-delete-orders-ID.h"
+#include <stdint.h>
#include <taler/taler_json_lib.h>
@@ -80,6 +81,7 @@ TMH_private_delete_orders_ID (const struct TMH_RequestHandler *rh,
bool paid = false;
bool wired = false;
bool matches = false;
+ uint16_t *choice_index = NULL;
qs = TMH_db->lookup_order (TMH_db->cls,
mi->settings.id,
@@ -98,7 +100,8 @@ TMH_private_delete_orders_ID (const struct TMH_RequestHandler *rh,
&paid,
&wired,
&matches,
- NULL);
+ NULL,
+ &choice_index);
}
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
return TALER_MHD_reply_with_error (connection,
diff --git a/src/backend/taler-merchant-httpd_private-get-orders-ID.c b/src/backend/taler-merchant-httpd_private-get-orders-ID.c
index 98653997..50626876 100644
--- a/src/backend/taler-merchant-httpd_private-get-orders-ID.c
+++ b/src/backend/taler-merchant-httpd_private-get-orders-ID.c
@@ -22,6 +22,9 @@
#include "platform.h"
#include "taler-merchant-httpd_private-get-orders-ID.h"
#include "taler-merchant-httpd_get-orders-ID.h"
+#include <gnunet/gnunet_json_lib.h>
+#include <jansson.h>
+#include <stdint.h>
#include <taler/taler_json_lib.h>
#include <taler/taler_dbevents.h>
#include "taler-merchant-httpd_mhd.h"
@@ -316,6 +319,12 @@ struct GetOrderRequestContext
uint64_t order_serial;
/**
+ * Index of selected choice from ``choices`` array in the contract_terms.
+ * Is -1 for orders without choices.
+ */
+ int16_t choice_index;
+
+ /**
* Total refunds granted for this payment. Only initialized
* if @e refunded is set to true.
*/
@@ -610,6 +619,7 @@ phase_fetch_contract (struct GetOrderRequestContext *gorc)
gorc->order_only = false;
}
TMH_db->preflight (TMH_db->cls);
+ /* TODO: Check if choice_index is actually set to NULL if not in db. */
qs = TMH_db->lookup_contract_terms3 (TMH_db->cls,
hc->instance->settings.id,
hc->infix,
@@ -619,7 +629,8 @@ phase_fetch_contract (struct GetOrderRequestContext *gorc)
&gorc->paid,
&gorc->wired,
&gorc->paid_session_matches,
- &gorc->claim_token);
+ &gorc->claim_token,
+ &gorc->choice_index);
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"lookup_contract_terms (%s) returned %d\n",
hc->infix,
@@ -1376,6 +1387,7 @@ phase_reply_result (struct GetOrderRequestContext *gorc)
struct TMH_HandlerContext *hc = gorc->hc;
MHD_RESULT ret;
char *order_status_url;
+ json_t *choice_index = json_null();
{
struct TALER_PrivateContractHashP *h_contract = NULL;
@@ -1403,6 +1415,12 @@ phase_reply_result (struct GetOrderRequestContext *gorc)
TALER_amount_is_zero (&gorc->contract_amount));
gorc->last_payment = gorc->timestamp;
}
+ if (-1 != gorc->choice_index) {
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Choice index is %d\n",
+ gorc->choice_index);
+ choice_index = json_integer ((json_int_t) gorc->choice_index);
+ }
ret = TALER_MHD_REPLY_JSON_PACK (
gorc->sc.con,
MHD_HTTP_OK,
@@ -1440,7 +1458,11 @@ phase_reply_result (struct GetOrderRequestContext *gorc)
GNUNET_JSON_pack_array_steal ("refund_details",
gorc->refund_details),
GNUNET_JSON_pack_string ("order_status_url",
- order_status_url));
+ order_status_url),
+ {
+ .field_name = "choice_index",
+ .object = choice_index,
+ });
GNUNET_free (order_status_url);
gorc->wire_details = NULL;
gorc->refund_details = NULL;
diff --git a/src/backenddb/pg_lookup_contract_terms3.c b/src/backenddb/pg_lookup_contract_terms3.c
index ef955a51..4c6fd477 100644
--- a/src/backenddb/pg_lookup_contract_terms3.c
+++ b/src/backenddb/pg_lookup_contract_terms3.c
@@ -20,6 +20,7 @@
* @author Christian Grothoff
*/
#include "platform.h"
+#include <sys/types.h>
#include <taler/taler_error_codes.h>
#include <taler/taler_dbevents.h>
#include <taler/taler_pq_lib.h>
@@ -38,11 +39,14 @@ TMH_PG_lookup_contract_terms3 (
bool *paid,
bool *wired,
bool *session_matches,
- struct TALER_ClaimTokenP *claim_token)
+ struct TALER_ClaimTokenP *claim_token,
+ int16_t *choice_index)
{
struct PostgresClosure *pg = cls;
enum GNUNET_DB_QueryStatus qs;
struct TALER_ClaimTokenP ct;
+ uint16_t ci;
+ bool choice_index_null = false;
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_string (instance_id),
GNUNET_PQ_query_param_string (order_id),
@@ -67,6 +71,10 @@ TMH_PG_lookup_contract_terms3 (
NULL),
GNUNET_PQ_result_spec_auto_from_type ("claim_token",
&ct),
+ GNUNET_PQ_result_spec_allow_null (
+ GNUNET_PQ_result_spec_uint16 ("choice_index",
+ &ci),
+ &choice_index_null),
GNUNET_PQ_result_spec_end
};
@@ -81,6 +89,7 @@ TMH_PG_lookup_contract_terms3 (
",paid"
",wired"
",(session_id=$3) AS session_matches"
+ ",choice_index"
" FROM merchant_contract_terms"
" WHERE order_id=$2"
" AND merchant_serial="
@@ -95,5 +104,9 @@ TMH_PG_lookup_contract_terms3 (
: &rs[1]);
if (NULL != claim_token)
*claim_token = ct;
+ if (! choice_index_null)
+ *choice_index = ci;
+ else
+ *choice_index = -1;
return qs;
}
diff --git a/src/backenddb/pg_lookup_contract_terms3.h b/src/backenddb/pg_lookup_contract_terms3.h
index d1cc78a2..14463835 100644
--- a/src/backenddb/pg_lookup_contract_terms3.h
+++ b/src/backenddb/pg_lookup_contract_terms3.h
@@ -37,7 +37,8 @@
* @param[out] paid set to true if the order is fully paid
* @param[out] wired set to true if the exchange wired the funds
* @param[out] session_matches set to true if @a session_id matches session stored for this contract
- * @param[out] claim_token set to token to use for access control
+ * @param[out] claim_token set to token to use for access control
+ * @param[out] choice_index set to the choice index, -1 if not set
* @return transaction status
*/
enum GNUNET_DB_QueryStatus
@@ -51,6 +52,7 @@ TMH_PG_lookup_contract_terms3 (
bool *paid,
bool *wired,
bool *session_matches,
- struct TALER_ClaimTokenP *claim_token);
+ struct TALER_ClaimTokenP *claim_token,
+ int16_t *choice_index);
#endif
diff --git a/src/include/taler_merchantdb_plugin.h b/src/include/taler_merchantdb_plugin.h
index 44fdc0ab..23122702 100644
--- a/src/include/taler_merchantdb_plugin.h
+++ b/src/include/taler_merchantdb_plugin.h
@@ -1903,6 +1903,7 @@ struct TALER_MERCHANTDB_Plugin
* @param[out] wired set to true if the exchange wired the funds
* @param[out] session_matches set to true if @a session_id matches session stored for this contract
* @param[out] claim_token set to the claim token, NULL to only check for existence
+ * @param[out] choice_index set to the choice index, -1 if not set
* @return transaction status
*/
enum GNUNET_DB_QueryStatus
@@ -1916,7 +1917,8 @@ struct TALER_MERCHANTDB_Plugin
bool *paid,
bool *wired,
bool *session_matches,
- struct TALER_ClaimTokenP *claim_token);
+ struct TALER_ClaimTokenP *claim_token,
+ int16_t *choice_index);
/**