commit 1337680d5f3771dc11d520037e239676ab5cdbfa
parent f2b5027ba37abbbfe7ff0711aa9aff2c0e08ac6c
Author: bohdan-potuzhnyi <bohdan.potuzhnyi@gmail.com>
Date: Wed, 23 Jul 2025 11:26:56 +0200
new select donau instances template files
Diffstat:
9 files changed, 240 insertions(+), 239 deletions(-)
diff --git a/src/backend/taler-merchant-httpd_private-get-donau-instances.c b/src/backend/taler-merchant-httpd_private-get-donau-instances.c
@@ -96,9 +96,9 @@ TMH_private_get_donau_instances (const struct TMH_RequestHandler *rh,
GNUNET_assert (NULL != json_donau_instances);
TMH_db->preflight (TMH_db->cls);
- qs = TMH_db->select_donau_instance (TMH_db->cls,
- &add_donau_instance,
- json_donau_instances);
+ qs = TMH_db->select_donau_instances (TMH_db->cls,
+ &add_donau_instance,
+ json_donau_instances);
if (0 > qs)
{
diff --git a/src/backend/taler-merchant-httpd_private-post-orders.c b/src/backend/taler-merchant-httpd_private-post-orders.c
@@ -3226,7 +3226,8 @@ phase_merge_inventory (struct OrderContext *oc)
* Callback function that is called for each donau instance.
* It simply adds the provided donau_url to the json.
*/
-/* FIXME: very-very bad */
+/* FIXME: Change the function to postgresql to only receive back the donau_url,
+ * and maybe charity max per year so we can compare it with amount from the output*/
static void
add_donau_url (void *cls,
const char *donau_url,
@@ -3253,10 +3254,10 @@ parse_donau_instances (struct OrderContext *oc,
enum GNUNET_DB_QueryStatus qs;
/* Invoke the database call, accumulating URLs in a JSON array */
- /* FIXME: select_donau_instanceS */
- qs = TMH_db->select_donau_instance (TMH_db->cls,
- &add_donau_url,
- output);
+ /* FIXME: select_donau_instances by currency */
+ qs = TMH_db->select_donau_instances (TMH_db->cls,
+ &add_donau_url,
+ output);
/* REVIEW: If no switch */
if (qs < 0)
diff --git a/src/backenddb/Makefile.am b/src/backenddb/Makefile.am
@@ -222,7 +222,7 @@ libtaler_plugin_merchantdb_postgres_la_SOURCES += \
pg_lookup_order_charity.h pg_lookup_order_charity.c \
pg_upsert_donau_keys.h pg_upsert_donau_keys.c \
pg_insert_donau_instance.h pg_insert_donau_instance.c \
- pg_select_donau_instance.h pg_select_donau_instance.c \
+ pg_select_donau_instances.h pg_select_donau_instances.c \
pg_delete_donau_instance.h pg_delete_donau_instance.c
endif
diff --git a/src/backenddb/pg_select_donau_instance.c b/src/backenddb/pg_select_donau_instance.c
@@ -1,171 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2024 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file backenddb/pg_select_donau_instance.c
- * @brief Implementation of the select_donau_instance function for Postgres
- * @author Bohdan Potuzhnyi
- * @author Vlada Svirsh
- */
-#include "platform.h"
-#include <taler/taler_error_codes.h>
-#include <taler/taler_dbevents.h>
-#include <taler/taler_pq_lib.h>
-#include "pg_select_donau_instance.h"
-#include "taler_merchant_donau.h"
-#include "pg_helper.h"
-
-/**
- * Context for select_donau_instances().
- */
-struct SelectDonauInstanceContext
-{
- /**
- * Function to call with the results.
- */
- TALER_MERCHANTDB_DonauInstanceCallback cb;
-
- /**
- * Closure for @e cb.
- */
- void *cb_cls;
-
- /**
- * Did database result extraction fail?
- */
- bool extract_failed;
-};
-
-
-/**
- * Function to be called with the results of a SELECT statement
- * that has returned @a num_results results about donau instances.
- *
- * @param[in, out] cls of type `struct SelectDonauInstanceContext *`
- * @param result the postgres result
- * @param num_results the number of results in @a result
- */
-static void
-select_donau_instance_cb (void *cls,
- PGresult *result,
- unsigned int num_results)
-{
- struct SelectDonauInstanceContext *sdc = cls;
-
- for (unsigned int i = 0; i < num_results; i++)
- {
- char *donau_url;
- char *charity_name;
- struct DONAU_CharityPublicKeyP charity_pub_key;
- uint64_t charity_id;
- struct TALER_Amount charity_max_per_year;
- struct TALER_Amount charity_receipts_to_date;
- int64_t current_year;
- json_t *donau_keys_json;
-
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_string ("donau_url",
- &donau_url),
- GNUNET_PQ_result_spec_string ("charity_name",
- &charity_name),
- GNUNET_PQ_result_spec_auto_from_type ("charity_pub_key",
- &charity_pub_key),
- GNUNET_PQ_result_spec_uint64 ("charity_id",
- &charity_id),
- TALER_PQ_result_spec_amount_with_currency ("charity_max_per_year",
- &charity_max_per_year),
- TALER_PQ_result_spec_amount_with_currency ("charity_receipts_to_date",
- &charity_receipts_to_date),
- GNUNET_PQ_result_spec_int64 ("current_year",
- ¤t_year),
- TALER_PQ_result_spec_json ("keys_json",
- &donau_keys_json),
- GNUNET_PQ_result_spec_end
- };
-
- // Extract result for each row
- if (GNUNET_OK !=
- GNUNET_PQ_extract_result (result,
- rs,
- i))
- {
- GNUNET_break (0); // Break on failure
- sdc->extract_failed = true;
- return;
- }
-
- // Call the callback function with the individual values
- sdc->cb (sdc->cb_cls,
- donau_url,
- charity_name,
- &charity_pub_key,
- charity_id,
- &charity_max_per_year,
- &charity_receipts_to_date,
- current_year,
- donau_keys_json);
-
- // Clean up any dynamically allocated results in the result spec
- GNUNET_PQ_cleanup_result (rs);
- }
-}
-
-
-enum GNUNET_DB_QueryStatus
-TMH_PG_select_donau_instance (void *cls,
- TALER_MERCHANTDB_DonauInstanceCallback cb,
- void *cb_cls)
-{
- struct PostgresClosure *pg = cls;
- struct SelectDonauInstanceContext sdc = {
- .cb = cb,
- .cb_cls = cb_cls,
- /* Can be overwritten by the select_donau_instance_cb */
- .extract_failed = false,
- };
-
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_end
- };
- enum GNUNET_DB_QueryStatus qs;
-
- check_connection (pg);
- PREPARE (pg,
- "select_donau_instances",
- "SELECT"
- " di.donau_url"
- ",di.charity_name"
- ",di.charity_pub_key"
- ",di.charity_id"
- ",di.charity_max_per_year"
- ",di.charity_receipts_to_date"
- ",di.current_year"
- ",dk.keys_json"
- " FROM merchant_donau_instances di"
- " JOIN merchant_donau_keys dk"
- " ON di.donau_url = dk.donau_url");
-
- qs = GNUNET_PQ_eval_prepared_multi_select (pg->conn,
- "select_donau_instances",
- params,
- &select_donau_instance_cb,
- &sdc);
-
- /* If there was an error inside select_donau_instance_cb, return a hard error. */
- if (sdc.extract_failed)
- return GNUNET_DB_STATUS_HARD_ERROR;
-
- return qs;
-}
-\ No newline at end of file
diff --git a/src/backenddb/pg_select_donau_instance.h b/src/backenddb/pg_select_donau_instance.h
@@ -1,44 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2024 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file backenddb/pg_select_donau_instance.h
- * @brief implementation of the select_donau_instance function for Postgres
- * @author Bohdan Potuzhnyi
- * @author Vlada Svirsh
- */
-#ifndef PG_SELECT_DONAU_INSTANCE_H
-#define PG_SELECT_DONAU_INSTANCE_H
-
-#include <taler/taler_util.h>
-#include <taler/taler_json_lib.h>
-#include "taler_merchantdb_plugin.h"
-#include "taler_merchant_donau.h"
-#include "donau/donau_util.h"
-
-/**
- * Select multiple Donau instances from the database.
- *
- * @param cls the closure for the database context
- * @param cb callback function to call with each result
- * @param cb_cls closure for the callback
- * @return status of the PG
- */
-enum GNUNET_DB_QueryStatus
-TMH_PG_select_donau_instance (void *cls,
- TALER_MERCHANTDB_DonauInstanceCallback cb,
- void *cb_cls);
-
-#endif
diff --git a/src/backenddb/pg_select_donau_instances_filtered.c b/src/backenddb/pg_select_donau_instances_filtered.c
@@ -0,0 +1,171 @@
+/*
+ This file is part of TALER
+ Copyright (C) 2024 Taler Systems SA
+
+ TALER is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+/**
+ * @file backenddb/pg_select_donau_instances.c
+ * @brief Implementation of the select_donau_instance function for Postgres
+ * @author Bohdan Potuzhnyi
+ * @author Vlada Svirsh
+ */
+#include "platform.h"
+#include <taler/taler_error_codes.h>
+#include <taler/taler_dbevents.h>
+#include <taler/taler_pq_lib.h>
+#include "pg_select_donau_instances.h"
+#include "taler_merchant_donau.h"
+#include "pg_helper.h"
+
+/**
+ * Context for select_donau_instances().
+ */
+struct SelectDonauInstanceContext
+{
+ /**
+ * Function to call with the results.
+ */
+ TALER_MERCHANTDB_DonauInstanceCallback cb;
+
+ /**
+ * Closure for @e cb.
+ */
+ void *cb_cls;
+
+ /**
+ * Did database result extraction fail?
+ */
+ bool extract_failed;
+};
+
+
+/**
+ * Function to be called with the results of a SELECT statement
+ * that has returned @a num_results results about donau instances.
+ *
+ * @param[in, out] cls of type `struct SelectDonauInstanceContext *`
+ * @param result the postgres result
+ * @param num_results the number of results in @a result
+ */
+static void
+select_donau_instance_cb (void *cls,
+ PGresult *result,
+ unsigned int num_results)
+{
+ struct SelectDonauInstanceContext *sdc = cls;
+
+ for (unsigned int i = 0; i < num_results; i++)
+ {
+ char *donau_url;
+ char *charity_name;
+ struct DONAU_CharityPublicKeyP charity_pub_key;
+ uint64_t charity_id;
+ struct TALER_Amount charity_max_per_year;
+ struct TALER_Amount charity_receipts_to_date;
+ int64_t current_year;
+ json_t *donau_keys_json;
+
+ struct GNUNET_PQ_ResultSpec rs[] = {
+ GNUNET_PQ_result_spec_string ("donau_url",
+ &donau_url),
+ GNUNET_PQ_result_spec_string ("charity_name",
+ &charity_name),
+ GNUNET_PQ_result_spec_auto_from_type ("charity_pub_key",
+ &charity_pub_key),
+ GNUNET_PQ_result_spec_uint64 ("charity_id",
+ &charity_id),
+ TALER_PQ_result_spec_amount_with_currency ("charity_max_per_year",
+ &charity_max_per_year),
+ TALER_PQ_result_spec_amount_with_currency ("charity_receipts_to_date",
+ &charity_receipts_to_date),
+ GNUNET_PQ_result_spec_int64 ("current_year",
+ ¤t_year),
+ TALER_PQ_result_spec_json ("keys_json",
+ &donau_keys_json),
+ GNUNET_PQ_result_spec_end
+ };
+
+ // Extract result for each row
+ if (GNUNET_OK !=
+ GNUNET_PQ_extract_result (result,
+ rs,
+ i))
+ {
+ GNUNET_break (0); // Break on failure
+ sdc->extract_failed = true;
+ return;
+ }
+
+ // Call the callback function with the individual values
+ sdc->cb (sdc->cb_cls,
+ donau_url,
+ charity_name,
+ &charity_pub_key,
+ charity_id,
+ &charity_max_per_year,
+ &charity_receipts_to_date,
+ current_year,
+ donau_keys_json);
+
+ // Clean up any dynamically allocated results in the result spec
+ GNUNET_PQ_cleanup_result (rs);
+ }
+}
+
+
+enum GNUNET_DB_QueryStatus
+TMH_PG_select_donau_instances (void *cls,
+ TALER_MERCHANTDB_DonauInstanceCallback cb,
+ void *cb_cls)
+{
+ struct PostgresClosure *pg = cls;
+ struct SelectDonauInstanceContext sdc = {
+ .cb = cb,
+ .cb_cls = cb_cls,
+ /* Can be overwritten by the select_donau_instance_cb */
+ .extract_failed = false,
+ };
+
+ struct GNUNET_PQ_QueryParam params[] = {
+ GNUNET_PQ_query_param_end
+ };
+ enum GNUNET_DB_QueryStatus qs;
+
+ check_connection (pg);
+ PREPARE (pg,
+ "select_donau_instances",
+ "SELECT"
+ " di.donau_url"
+ ",di.charity_name"
+ ",di.charity_pub_key"
+ ",di.charity_id"
+ ",di.charity_max_per_year"
+ ",di.charity_receipts_to_date"
+ ",di.current_year"
+ ",dk.keys_json"
+ " FROM merchant_donau_instances di"
+ " JOIN merchant_donau_keys dk"
+ " ON di.donau_url = dk.donau_url");
+
+ qs = GNUNET_PQ_eval_prepared_multi_select (pg->conn,
+ "select_donau_instances",
+ params,
+ &select_donau_instance_cb,
+ &sdc);
+
+ /* If there was an error inside select_donau_instance_cb, return a hard error. */
+ if (sdc.extract_failed)
+ return GNUNET_DB_STATUS_HARD_ERROR;
+
+ return qs;
+}
+\ No newline at end of file
diff --git a/src/backenddb/pg_select_donau_instances_filtered.h b/src/backenddb/pg_select_donau_instances_filtered.h
@@ -0,0 +1,44 @@
+/*
+ This file is part of TALER
+ Copyright (C) 2024 Taler Systems SA
+
+ TALER is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+/**
+ * @file backenddb/pg_select_donau_instances.h
+ * @brief implementation of the select_donau_instance function for Postgres
+ * @author Bohdan Potuzhnyi
+ * @author Vlada Svirsh
+ */
+#ifndef PG_SELECT_DONAU_INSTANCE_H
+#define PG_SELECT_DONAU_INSTANCE_H
+
+#include <taler/taler_util.h>
+#include <taler/taler_json_lib.h>
+#include "taler_merchantdb_plugin.h"
+#include "taler_merchant_donau.h"
+#include "donau/donau_util.h"
+
+/**
+ * Select multiple Donau instances from the database.
+ *
+ * @param cls the closure for the database context
+ * @param cb callback function to call with each result
+ * @param cb_cls closure for the callback
+ * @return status of the PG
+ */
+enum GNUNET_DB_QueryStatus
+TMH_PG_select_donau_instances (void *cls,
+ TALER_MERCHANTDB_DonauInstanceCallback cb,
+ void *cb_cls);
+
+#endif
diff --git a/src/backenddb/plugin_merchantdb_postgres.c b/src/backenddb/plugin_merchantdb_postgres.c
@@ -165,7 +165,7 @@
#ifdef HAVE_DONAU_DONAU_SERVICE_H
#include "donau/donau_service.h"
#include "pg_insert_donau_instance.h"
-#include "pg_select_donau_instance.h"
+#include "pg_select_donau_instances.h"
#include "pg_delete_donau_instance.h"
#include "pg_lookup_donau_keys.h"
#include "pg_lookup_order_charity.h"
@@ -663,18 +663,18 @@ libtaler_plugin_merchantdb_postgres_init (void *cls)
plugin->gc
= &TMH_PG_gc;
#ifdef HAVE_DONAU_DONAU_SERVICE_H
- plugin->insert_donau_instance
- = &TMH_PG_insert_donau_instance;
- plugin->select_donau_instance
- = &TMH_PG_select_donau_instance;
- plugin->delete_donau_instance
- = &TMH_PG_delete_donau_instance;
- plugin->lookup_donau_keys
- = &TMH_PG_lookup_donau_keys;
- plugin->lookup_order_charity
- = &TMH_PG_lookup_order_charity;
- plugin->upsert_donau_keys
- = &TMH_PG_upsert_donau_keys;
+ plugin->insert_donau_instance
+ = &TMH_PG_insert_donau_instance;
+ plugin->select_donau_instances
+ = &TMH_PG_select_donau_instances;
+ plugin->delete_donau_instance
+ = &TMH_PG_delete_donau_instance;
+ plugin->lookup_donau_keys
+ = &TMH_PG_lookup_donau_keys;
+ plugin->lookup_order_charity
+ = &TMH_PG_lookup_order_charity;
+ plugin->upsert_donau_keys
+ = &TMH_PG_upsert_donau_keys;
#endif
return plugin;
}
diff --git a/src/include/taler_merchantdb_plugin.h b/src/include/taler_merchantdb_plugin.h
@@ -4129,7 +4129,7 @@ struct TALER_MERCHANTDB_Plugin
);
enum GNUNET_DB_QueryStatus
- (*select_donau_instance)(
+ (*select_donau_instances)(
void *cls,
TALER_MERCHANTDB_DonauInstanceCallback cb,
void *cb_cls