Line data Source code
1 : /*
2 : This file is part of TALER
3 : (C) 2024 Taler Systems SA
4 :
5 : TALER is free software; you can redistribute it and/or modify it under the
6 : terms of the GNU Affero General Public License as published by the Free Software
7 : Foundation; either version 3, or (at your option) any later version.
8 :
9 : TALER is distributed in the hope that it will be useful, but WITHOUT ANY
10 : WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
11 : A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12 :
13 : You should have received a copy of the GNU General Public License along with
14 : TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
15 : */
16 : /**
17 : * @file taler-merchant-httpd_private-get-categories.c
18 : * @brief implement GET /categories
19 : * @author Christian Grothoff
20 : */
21 : #include "platform.h"
22 : #include "taler-merchant-httpd_private-get-categories.h"
23 :
24 :
25 : /**
26 : * Add category details to our JSON array.
27 : *
28 : * @param cls a `json_t *` JSON array to build
29 : * @param category_id ID of the category
30 : * @param category_name name of the category
31 : * @param category_name_i18n translations of the @a category_name
32 : * @param product_count number of products in the category
33 : */
34 : static void
35 0 : add_category (void *cls,
36 : uint64_t category_id,
37 : const char *category_name,
38 : const json_t *category_name_i18n,
39 : uint64_t product_count)
40 : {
41 0 : json_t *pa = cls;
42 :
43 0 : GNUNET_assert (
44 : 0 ==
45 : json_array_append_new (
46 : pa,
47 : GNUNET_JSON_PACK (
48 : GNUNET_JSON_pack_uint64 (
49 : "category_id",
50 : category_id),
51 : GNUNET_JSON_pack_string (
52 : "name",
53 : category_name),
54 : GNUNET_JSON_pack_object_incref (
55 : "name_i18n",
56 : (json_t *) category_name_i18n),
57 : GNUNET_JSON_pack_uint64 (
58 : "product_count",
59 : product_count))));
60 0 : }
61 :
62 :
63 : MHD_RESULT
64 0 : TMH_private_get_categories (const struct TMH_RequestHandler *rh,
65 : struct MHD_Connection *connection,
66 : struct TMH_HandlerContext *hc)
67 : {
68 : json_t *pa;
69 : enum GNUNET_DB_QueryStatus qs;
70 :
71 0 : pa = json_array ();
72 0 : GNUNET_assert (NULL != pa);
73 0 : qs = TMH_db->lookup_categories (TMH_db->cls,
74 0 : hc->instance->settings.id,
75 : &add_category,
76 : pa);
77 0 : if (0 > qs)
78 : {
79 0 : GNUNET_break (0);
80 0 : json_decref (pa);
81 0 : return TALER_MHD_reply_with_error (connection,
82 : MHD_HTTP_INTERNAL_SERVER_ERROR,
83 : TALER_EC_GENERIC_DB_FETCH_FAILED,
84 : NULL);
85 : }
86 0 : return TALER_MHD_REPLY_JSON_PACK (connection,
87 : MHD_HTTP_OK,
88 : GNUNET_JSON_pack_array_steal ("categories",
89 : pa));
90 : }
91 :
92 :
93 : /* end of taler-merchant-httpd_private-get-categories.c */
|