summaryrefslogtreecommitdiff
path: root/src/backend/taler-merchant-httpd_private-patch-orders-ID-forget.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/taler-merchant-httpd_private-patch-orders-ID-forget.c')
-rw-r--r--src/backend/taler-merchant-httpd_private-patch-orders-ID-forget.c43
1 files changed, 39 insertions, 4 deletions
diff --git a/src/backend/taler-merchant-httpd_private-patch-orders-ID-forget.c b/src/backend/taler-merchant-httpd_private-patch-orders-ID-forget.c
index 2ec8193a..da56cda2 100644
--- a/src/backend/taler-merchant-httpd_private-patch-orders-ID-forget.c
+++ b/src/backend/taler-merchant-httpd_private-patch-orders-ID-forget.c
@@ -46,11 +46,31 @@ forget (void *cls,
json_t *parent)
{
int *res = cls;
+ int ret;
- if (GNUNET_OK !=
- TALER_JSON_contract_part_forget (parent,
- object_id))
+ ret = TALER_JSON_contract_part_forget (parent,
+ object_id);
+ if (GNUNET_SYSERR == ret)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "Matching path `%s' not forgettable!\n",
+ object_id);
*res = GNUNET_SYSERR;
+ }
+ if (GNUNET_NO == ret)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Matching path `%s' already forgotten!\n",
+ object_id);
+ }
+ else
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Forgot `%s'\n",
+ object_id);
+ if (GNUNET_NO == *res)
+ *res = GNUNET_OK;
+ }
}
@@ -75,6 +95,7 @@ TMH_private_patch_orders_ID_forget (const struct TMH_RequestHandler *rh,
{
json_t *fields;
json_t *contract_terms;
+ bool changed = false;
if (GNUNET_OK !=
TMH_db->start (TMH_db->cls,
@@ -146,8 +167,9 @@ TMH_private_patch_orders_ID_forget (const struct TMH_RequestHandler *rh,
{
size_t index;
json_t *value;
+
json_array_foreach (fields, index, value) {
- int forget_status = GNUNET_OK;
+ int forget_status = GNUNET_NO;
int expand_status;
if (! (json_is_string (value)))
@@ -175,6 +197,8 @@ TMH_private_patch_orders_ID_forget (const struct TMH_RequestHandler *rh,
TALER_EC_MERCHANT_PRIVATE_PATCH_ORDERS_ID_FORGET_PATH_NOT_FORGETTABLE,
json_string_value (value));
}
+ if (GNUNET_OK == forget_status)
+ changed = true;
if (GNUNET_SYSERR == expand_status)
{
/* One of the paths was malformed and couldn't be expanded */
@@ -189,6 +213,17 @@ TMH_private_patch_orders_ID_forget (const struct TMH_RequestHandler *rh,
}
}
+ if (! changed)
+ {
+ TMH_db->rollback (TMH_db->cls);
+ json_decref (contract_terms);
+ json_decref (fields);
+ return TALER_MHD_reply_static (connection,
+ MHD_HTTP_NO_CONTENT,
+ NULL,
+ NULL,
+ 0);
+ }
qs = TMH_db->update_contract_terms (TMH_db->cls,
hc->instance->settings.id,
order_id,