donau

Donation authority for GNU Taler (experimental)
Log | Files | Refs | Submodules | README | LICENSE

commit 65aa20e8cdaf97a797cc0aea198f447cb6506dc2
parent 331456a2671351009192f9f857a6969a5be00df2
Author: Casaburi Johannes <johannes.casaburi@students.bfh.ch>
Date:   Sun, 14 Jan 2024 20:29:56 +0100

Added missing charity get data

Diffstat:
Msrc/donau/donau-httpd_get-charities.c | 18++++++++++++++----
Msrc/donau/donau-httpd_get-charity.c | 13++++++++++++-
Msrc/donaudb/pg_get_charities.c | 26++++++++++++++++++++++++--
Msrc/donaudb/pg_helper.h | 70+++++++++++++++++++++++++++++++++++-----------------------------------
Msrc/donaudb/pg_lookup_charity.c | 18+++++++++++++++---
Msrc/include/donaudb_plugin.h | 14+++++++++++---
6 files changed, 111 insertions(+), 48 deletions(-)

diff --git a/src/donau/donau-httpd_get-charities.c b/src/donau/donau-httpd_get-charities.c @@ -22,7 +22,6 @@ #include <gnunet/gnunet_util_lib.h> #include <jansson.h> #include <microhttpd.h> -#include <pthread.h> #include "taler/taler_json_lib.h" #include "taler/taler_mhd_lib.h" #include "taler/taler_signatures.h" @@ -45,8 +44,12 @@ static void charities_cb ( void *cls, + struct DONAU_CharityPublicKeyP charity_pub, + const char *charity_name, const char *charity_url, - const char *charity_name) + struct TALER_Amount max_per_year, + struct TALER_Amount receipts_to_date, + uint64_t current_year) { json_t *charities = cls; @@ -55,11 +58,18 @@ charities_cb ( json_array_append ( charities, GNUNET_JSON_PACK ( + GNUNET_JSON_pack_data_auto ("charity_pub", + &charity_pub), GNUNET_JSON_pack_string ("url", charity_url), GNUNET_JSON_pack_string ("name", - charity_name) - ))); + charity_name), + TALER_JSON_pack_amount ("max_per_year", + &max_per_year), + TALER_JSON_pack_amount ("receipts_to_date", + &receipts_to_date), + GNUNET_JSON_pack_int64 ("current_year", + current_year)))); } diff --git a/src/donau/donau-httpd_get-charity.c b/src/donau/donau-httpd_get-charity.c @@ -99,13 +99,24 @@ DH_handler_charity_get ( result = TALER_MHD_REPLY_JSON_PACK ( rc->connection, MHD_HTTP_OK, + GNUNET_JSON_pack_data_auto ("charity_pub", + meta.charity_pub), GNUNET_JSON_pack_data_auto ("url", &meta.charity_url), GNUNET_JSON_pack_data_auto ("name", - &meta.charity_name)); + &meta.charity_name), + TALER_JSON_pack_amount ("max_per_year", + meta.max_per_year), + TALER_JSON_pack_amount ("receipts_to_date", + meta.receipts_to_date), + GNUNET_JSON_pack_uint64 ("current_year", + meta.current_year)); + GNUNET_free (meta.charity_pub); GNUNET_free (meta.charity_url); GNUNET_free (meta.charity_name); + GNUNET_free (meta.max_per_year); + GNUNET_free (meta.receipts_to_date); return result; } } diff --git a/src/donaudb/pg_get_charities.c b/src/donaudb/pg_get_charities.c @@ -65,14 +65,28 @@ get_charities_cb (void *cls, for (unsigned int i = 0; i < num_results; i++) { + struct DONAU_CharityPublicKeyP charity_pub; char *charity_name; char *charity_url; + struct TALER_Amount max_per_year; + struct TALER_Amount receipts_to_date; + uint64_t current_year; struct GNUNET_PQ_ResultSpec rs[] = { + GNUNET_PQ_result_spec_auto_from_type ("charity_pub", + &charity_pub), GNUNET_PQ_result_spec_string ("charity_name", &charity_name), GNUNET_PQ_result_spec_string ("charity_url", &charity_url), + TALER_PQ_result_spec_amount ("max_per_year", + "EUR", // TODO: Error if using TALER_PQ_RESULT_SPEC_AMOUNT + &max_per_year), + TALER_PQ_result_spec_amount ("receipts_to_date", + "EUR", // TODO: Error if using TALER_PQ_RESULT_SPEC_AMOUNT + &receipts_to_date), + GNUNET_PQ_result_spec_uint64 ("current_year", + &current_year), GNUNET_PQ_result_spec_end }; @@ -86,8 +100,12 @@ get_charities_cb (void *cls, return; } ctx->cb (ctx->cb_cls, + charity_pub, charity_name, - charity_url); + charity_url, + max_per_year, + receipts_to_date, + current_year); GNUNET_PQ_cleanup_result (rs); } } @@ -112,8 +130,12 @@ DH_PG_get_charities (void *cls, PREPARE (pg, "get_charities", "SELECT" - " charity_name" + " charity_pub" + ",charity_name" ",charity_url" + ",max_per_year" + ",receipts_to_date" + ",current_year" " FROM charities"); qs = GNUNET_PQ_eval_prepared_multi_select (pg->conn, "get_charities", diff --git a/src/donaudb/pg_helper.h b/src/donaudb/pg_helper.h @@ -55,16 +55,16 @@ struct PostgresClosure struct GNUNET_PQ_Context *conn; /** + * Name of the current transaction, for debugging. + */ + const char *transaction_name; + + /** * Counts how often we have established a fresh @e conn * to the database. Used to re-prepare statements. */ unsigned long long prep_gen; - /** - * Name of the current transaction, for debugging. - */ - const char *transaction_name; - }; @@ -78,37 +78,37 @@ struct PostgresClosure * @param sql actual SQL text */ #define PREPARE(pg,name,sql) \ - do { \ - static struct { \ - unsigned long long cnt; \ - struct PostgresClosure *pg; \ - } preps[2]; /* 2 ctrs for taler-auditor-sync*/ \ - unsigned int off = 0; \ + do { \ + static struct { \ + unsigned long long cnt; \ + struct PostgresClosure *pg; \ + } preps[2]; /* 2 ctrs for taler-auditor-sync*/ \ + unsigned int off = 0; \ \ - while ( (NULL != preps[off].pg) && \ - (pg != preps[off].pg) && \ - (off < sizeof(preps) / sizeof(*preps)) ) \ - off++; \ - GNUNET_assert (off < \ - sizeof(preps) / sizeof(*preps)); \ - if (preps[off].cnt < pg->prep_gen) \ - { \ - struct GNUNET_PQ_PreparedStatement ps[] = { \ - GNUNET_PQ_make_prepare (name, sql), \ - GNUNET_PQ_PREPARED_STATEMENT_END \ - }; \ + while ( (NULL != preps[off].pg) && \ + (pg != preps[off].pg) && \ + (off < sizeof(preps) / sizeof(*preps)) ) \ + off++; \ + GNUNET_assert (off < \ + sizeof(preps) / sizeof(*preps)); \ + if (preps[off].cnt < pg->prep_gen) \ + { \ + struct GNUNET_PQ_PreparedStatement ps[] = { \ + GNUNET_PQ_make_prepare (name, sql), \ + GNUNET_PQ_PREPARED_STATEMENT_END \ + }; \ \ - if (GNUNET_OK != \ - GNUNET_PQ_prepare_statements (pg->conn, \ - ps)) \ - { \ - GNUNET_break (0); \ - return GNUNET_DB_STATUS_HARD_ERROR; \ - } \ - preps[off].pg = pg; \ - preps[off].cnt = pg->prep_gen; \ - } \ - } while (0) + if (GNUNET_OK != \ + GNUNET_PQ_prepare_statements (pg->conn, \ + ps)) \ + { \ + GNUNET_break (0); \ + return GNUNET_DB_STATUS_HARD_ERROR; \ + } \ + preps[off].pg = pg; \ + preps[off].cnt = pg->prep_gen; \ + } \ + } while (0) /** @@ -120,7 +120,7 @@ struct PostgresClosure */ #define TALER_PQ_RESULT_SPEC_AMOUNT(field, \ amountp) TALER_PQ_result_spec_amount ( \ - field,pg->currency,amountp) + field,pg->currency,amountp) #endif diff --git a/src/donaudb/pg_lookup_charity.c b/src/donaudb/pg_lookup_charity.c @@ -37,18 +37,30 @@ DH_PG_lookup_charity ( GNUNET_PQ_query_param_end }; struct GNUNET_PQ_ResultSpec rs[] = { - GNUNET_PQ_result_spec_string ("charity_url", - &meta->charity_url), + GNUNET_PQ_result_spec_auto_from_type ("charity_pub", + &meta->charity_pub), GNUNET_PQ_result_spec_string ("charity_name", &meta->charity_name), + GNUNET_PQ_result_spec_string ("charity_url", + &meta->charity_url), + TALER_PQ_RESULT_SPEC_AMOUNT ("max_per_year", + meta->max_per_year), + TALER_PQ_RESULT_SPEC_AMOUNT ("receipts_to_date", + meta->receipts_to_date), + GNUNET_PQ_result_spec_uint64 ("current_year", + &meta->current_year), GNUNET_PQ_result_spec_end }; PREPARE (pg, "lookup_charity", "SELECT " - " charity_name" + " charity_pub" + " ,charity_name" " ,charity_url" + " ,max_per_year" + " ,receipts_to_date" + " ,current_year" " FROM charities" " WHERE charity_id=$1;"); return GNUNET_PQ_eval_prepared_singleton_select (pg->conn, diff --git a/src/include/donaudb_plugin.h b/src/include/donaudb_plugin.h @@ -104,6 +104,11 @@ struct DONAUDB_CharityMetaData */ struct TALER_Amount *receipts_to_date; + /** + * Current year + */ + uint64_t current_year; + }; @@ -177,8 +182,12 @@ typedef void typedef void (*DONAUDB_GetCharitiesCallback)( void *cls, + const struct DONAU_CharityPublicKeyP charity_pub, const char *charity_name, - const char *charity_url); + const char *charity_url, + struct TALER_Amount max_per_year, + struct TALER_Amount receipts_to_date, + uint64_t current_year); /** * @brief The plugin API, returned from the plugin's "init" function. @@ -355,8 +364,7 @@ struct DONAUDB_Plugin * * @param cls closure * @param charity_id - * @param charity_url - * @param charity_name + * @param meta * @return database transaction status */ enum GNUNET_DB_QueryStatus