gnunet-svn
[Top][All Lists]
Advanced

[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 (&current_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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]