diff options
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.c | 43 |
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, |