[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-donau] branch master updated: [donau][db] return charity id after
From: |
gnunet |
Subject: |
[taler-donau] branch master updated: [donau][db] return charity id after post |
Date: |
Mon, 11 Mar 2024 21:14:04 +0100 |
This is an automated email from the git hooks/post-receive script.
lukas-matyja pushed a commit to branch master
in repository donau.
The following commit(s) were added to refs/heads/master by this push:
new f120768 [donau][db] return charity id after post
f120768 is described below
commit f120768d219d12a07cd3bf3ffb546bb45f20b7bf
Author: Matyja Lukas Adam <lukas.matyja@students.bfh.ch>
AuthorDate: Mon Mar 11 21:14:55 2024 +0100
[donau][db] return charity id after post
---
src/donau/donau-httpd_post-charity.c | 17 +++++++++------
src/donaudb/pg_insert_charity.c | 34 ++++++++++++++++++++----------
src/donaudb/pg_insert_charity.h | 3 ++-
src/include/donau_service.h | 7 +++++-
src/include/donaudb_plugin.h | 3 ++-
src/lib/donau_api_charity_post.c | 16 ++++++++++++++
src/testing/test_donau_api.c | 4 ++--
src/testing/testing_api_cmd_charity_post.c | 2 +-
8 files changed, 63 insertions(+), 23 deletions(-)
diff --git a/src/donau/donau-httpd_post-charity.c
b/src/donau/donau-httpd_post-charity.c
index 8be626e..5bac3ae 100644
--- a/src/donau/donau-httpd_post-charity.c
+++ b/src/donau/donau-httpd_post-charity.c
@@ -44,7 +44,7 @@ struct InsertCharityContext
struct TALER_Amount max_per_year;
struct TALER_Amount receipts_to_date;
uint64_t current_year;
-
+ uint64_t charity_id;
};
@@ -77,7 +77,8 @@ insert_charity (void *cls,
icc->charity_url,
&icc->max_per_year,
&icc->receipts_to_date,
- icc->current_year);
+ &icc->current_year,
+
&icc->charity_id);
if (qs <= 0)
{
if (GNUNET_DB_STATUS_SOFT_ERROR != qs)
@@ -150,12 +151,16 @@ DH_handler_charity_post (struct DH_RequestContext *rc,
return mhd_ret;
}
}
- return TALER_MHD_reply_static (
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "generated charity id: %lu\n",
+ icc.charity_id);
+
+ return TALER_MHD_REPLY_JSON_PACK (
rc->connection,
MHD_HTTP_CREATED,
- NULL,
- NULL,
- 0);
+ GNUNET_JSON_pack_uint64 ("charity-id",
+
icc.charity_id));
}
diff --git a/src/donaudb/pg_insert_charity.c b/src/donaudb/pg_insert_charity.c
index f299229..8938e41 100644
--- a/src/donaudb/pg_insert_charity.c
+++ b/src/donaudb/pg_insert_charity.c
@@ -17,6 +17,7 @@
* @file donaudb/pg_insert_charity.c
* @brief Implementation of the insert_charity function for Postgres
* @author Johannes Casaburi
+ * @author Lukas Matyja
*/
#include <taler/platform.h>
#include <taler/taler_error_codes.h>
@@ -25,14 +26,17 @@
#include "pg_insert_charity.h"
#include "pg_helper.h"
+
enum GNUNET_DB_QueryStatus
-DH_PG_insert_charity (void *cls,
- const struct DONAU_CharityPublicKeyP *charity_pub,
- const char *charity_name,
- const char *charity_url,
- struct TALER_Amount *max_per_year,
- struct TALER_Amount *receipts_to_date,
- uint64_t current_year)
+DH_PG_insert_charity (
+ void *cls,
+ const struct DONAU_CharityPublicKeyP *charity_pub,
+ const char *charity_name,
+ const char *charity_url,
+ struct TALER_Amount *max_per_year,
+ struct TALER_Amount *receipts_to_date,
+ uint64_t *current_year,
+ uint64_t *charity_id)
{
struct PostgresClosure *pg = cls;
struct GNUNET_PQ_QueryParam params[] = {
@@ -43,10 +47,16 @@ DH_PG_insert_charity (void *cls,
max_per_year),
TALER_PQ_query_param_amount (pg->conn,
receipts_to_date),
- GNUNET_PQ_query_param_uint64 (¤t_year),
+ GNUNET_PQ_query_param_uint64 (current_year),
GNUNET_PQ_query_param_end
};
+ struct GNUNET_PQ_ResultSpec rs[] = {
+ GNUNET_PQ_result_spec_uint64 ("charity_id",
+ charity_id),
+ GNUNET_PQ_result_spec_end
+ };
+
PREPARE (pg,
"insert_charity",
"INSERT INTO charities "
@@ -57,8 +67,10 @@ DH_PG_insert_charity (void *cls,
",receipts_to_date"
",current_year"
") VALUES "
- "($1, $2, $3, $4, $5, $6);");
- return GNUNET_PQ_eval_prepared_non_select (pg->conn,
+ "($1, $2, $3, $4, $5, $6) "
+ "RETURNING charity_id;");
+ return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
"insert_charity",
- params);
+ params,
+
rs);
}
diff --git a/src/donaudb/pg_insert_charity.h b/src/donaudb/pg_insert_charity.h
index e375bc7..54c470c 100644
--- a/src/donaudb/pg_insert_charity.h
+++ b/src/donaudb/pg_insert_charity.h
@@ -45,6 +45,7 @@ DH_PG_insert_charity (
const char *charity_url,
struct TALER_Amount *max_per_year,
struct TALER_Amount *receipts_to_date,
- uint64_t current_year);
+ uint64_t *current_year,
+ uint64_t *charity_id);
#endif
diff --git a/src/include/donau_service.h b/src/include/donau_service.h
index 5a3502d..bf074b9 100644
--- a/src/include/donau_service.h
+++ b/src/include/donau_service.h
@@ -908,6 +908,11 @@ struct DONAU_Charity
*/
char *name;
+ /**
+ * charity url
+ */
+ char *charity_url;
+
/**
* public key of the charity
*/
@@ -1096,7 +1101,7 @@ struct DONAU_PostCharityResponse
/**
* charity id
*/
- unsigned long long charity_id;
+ uint64_t charity_id;
} ok;
diff --git a/src/include/donaudb_plugin.h b/src/include/donaudb_plugin.h
index a682188..86c1d9e 100644
--- a/src/include/donaudb_plugin.h
+++ b/src/include/donaudb_plugin.h
@@ -392,7 +392,8 @@ struct DONAUDB_Plugin
const char *charity_url,
struct TALER_Amount *max_per_year,
struct TALER_Amount *receipts_to_date,
- uint64_t current_year);
+ uint64_t *current_year,
+ uint64_t *charity_id);
/**
* Iterate donation units.
diff --git a/src/lib/donau_api_charity_post.c b/src/lib/donau_api_charity_post.c
index 8fae05b..e15200a 100644
--- a/src/lib/donau_api_charity_post.c
+++ b/src/lib/donau_api_charity_post.c
@@ -82,6 +82,7 @@ handle_charity_post_finished (void *cls,
{
struct DONAU_CharityPostHandle *cph = cls;
const json_t *j = resp_obj;
+
struct DONAU_PostCharityResponse pcresp = {
.hr.reply = j,
.hr.http_status = (unsigned int) response_code
@@ -91,6 +92,21 @@ handle_charity_post_finished (void *cls,
switch (response_code)
{
case MHD_HTTP_CREATED:
+ struct GNUNET_JSON_Specification spec[] = {
+ GNUNET_JSON_spec_uint64 ("charity-id",
+ &pcresp.details.ok.charity_id),
+ GNUNET_JSON_spec_end ()
+ };
+ if (GNUNET_OK !=
+ GNUNET_JSON_parse (j,
+ spec,
+ NULL,
+ NULL))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Could not parse response from charity
POST\n");
+ GNUNET_break_op (0);
+ }
break;
case MHD_HTTP_NO_CONTENT:
pcresp.hr.ec = TALER_JSON_get_error_code (j);
diff --git a/src/testing/test_donau_api.c b/src/testing/test_donau_api.c
index 2039edf..016862c 100644
--- a/src/testing/test_donau_api.c
+++ b/src/testing/test_donau_api.c
@@ -95,14 +95,14 @@ run (void *cls,
MHD_HTTP_CREATED),
TALER_TESTING_cmd_charity_get ("get-charity-by-id",
8,
-
"post-charity",
+
"post-charity", // cmd trait reference
&bearer,
MHD_HTTP_OK),
TALER_TESTING_cmd_charities_get ("get-charities",
&bearer,
MHD_HTTP_OK),
// TALER_TESTING_cmd_charity_delete("delete-charity",
-// 8,
+//
"post-charity", // cmd trait reference
//
&bearer,
//
MHD_HTTP_NO_CONTENT),
/* End the suite. */
diff --git a/src/testing/testing_api_cmd_charity_post.c
b/src/testing/testing_api_cmd_charity_post.c
index 7ee6a84..d086b0d 100644
--- a/src/testing/testing_api_cmd_charity_post.c
+++ b/src/testing/testing_api_cmd_charity_post.c
@@ -99,7 +99,7 @@ charity_status_cb (void *cls,
return;
}
if (ss->expected_response_code == gcr->hr.http_status)
- ss->charity_id = gcr->details.ok.charity_id;
+ ss->charity_id = (unsigned long long) gcr->details.ok.charity_id;
TALER_TESTING_interpreter_next (ss->is);
}
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-donau] branch master updated: [donau][db] return charity id after post,
gnunet <=