aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/exchangedb/Makefile.am5
-rw-r--r--src/exchangedb/pg_iterate_kyc_reference.c95
-rw-r--r--src/exchangedb/pg_iterate_reserve_close_info.c103
-rw-r--r--src/exchangedb/pg_select_reserve_close_info.c25
4 files changed, 183 insertions, 45 deletions
diff --git a/src/exchangedb/Makefile.am b/src/exchangedb/Makefile.am
index 3ea5a0d94..e446682b9 100644
--- a/src/exchangedb/Makefile.am
+++ b/src/exchangedb/Makefile.am
@@ -70,7 +70,10 @@ endif
libtaler_plugin_exchangedb_postgres_la_SOURCES = \
plugin_exchangedb_postgres.c pg_helper.h \
pg_insert_close_request.c pg_insert_close_request.h \
- pg_insert_reserve_open_deposit.c pg_insert_reserve_open_deposit.h
+ pg_insert_reserve_open_deposit.c pg_insert_reserve_open_deposit.h \
+ pg_iterate_kyc_reference.c pg_iterate_kyc_reference.h \
+ pg_iterate_reserve_close_info.c pg_iterate_reserve_close_info.h \
+ pg_select_reserve_close_info.c pg_select_reserve_close_info.h
libtaler_plugin_exchangedb_postgres_la_LIBADD = \
$(LTLIBINTL)
libtaler_plugin_exchangedb_postgres_la_LDFLAGS = \
diff --git a/src/exchangedb/pg_iterate_kyc_reference.c b/src/exchangedb/pg_iterate_kyc_reference.c
index e24a22bf2..4a94722c4 100644
--- a/src/exchangedb/pg_iterate_kyc_reference.c
+++ b/src/exchangedb/pg_iterate_kyc_reference.c
@@ -26,6 +26,75 @@
#include "pg_helper.h"
+/**
+ * Closure for #iterate_kyc_reference_cb()
+ */
+struct IteratorContext
+{
+ /**
+ * Function to call with the results.
+ */
+ TALER_EXCHANGEDB_LegitimizationProcessCallback cb;
+
+ /**
+ * Closure to pass to @e cb
+ */
+ void *cb_cls;
+
+ /**
+ * Plugin context.
+ */
+ struct PostgresClosure *pg;
+};
+
+
+/**
+ * Helper function for #TEH_PG_iterate_kyc_reference().
+ * Calls the callback with each denomination key.
+ *
+ * @param cls a `struct IteratorContext`
+ * @param result db results
+ * @param num_results number of results in @a result
+ */
+static void
+iterate_kyc_reference_cb (void *cls,
+ PGresult *result,
+ unsigned int num_results)
+{
+ struct IteratorContext *ic = cls;
+
+ for (unsigned int i = 0; i<num_results; i++)
+ {
+ char *kyc_provider_section_name;
+ char *provider_user_id;
+ char *legitimization_id;
+ struct GNUNET_PQ_ResultSpec rs[] = {
+ GNUNET_PQ_result_spec_string ("section_name",
+ &kyc_provider_section_name),
+ GNUNET_PQ_result_spec_string ("provider_user_id",
+ &provider_user_id),
+ GNUNET_PQ_result_spec_string ("legi_id",
+ &legitimization_id),
+ GNUNET_PQ_result_spec_end
+ };
+
+ if (GNUNET_OK !=
+ GNUNET_PQ_extract_result (result,
+ rs,
+ i))
+ {
+ GNUNET_break (0);
+ return;
+ }
+ ic->cb (ic->cb_cls,
+ kyc_provider_section_name,
+ provider_user_id,
+ legitimization_id);
+ GNUNET_PQ_cleanup_result (rs);
+ }
+}
+
+
enum GNUNET_DB_QueryStatus
TEH_PG_iterate_kyc_reference (
void *cls,
@@ -38,21 +107,23 @@ TEH_PG_iterate_kyc_reference (
GNUNET_PQ_query_param_auto_from_type (h_payto),
GNUNET_PQ_query_param_end
};
- // FIXME: everything from here is copy*paste
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_bool ("insufficient_funds",
- insufficient_funds),
- GNUNET_PQ_result_spec_end
+ struct IteratorContext ic = {
+ .cb = lpc,
+ .cb_cls = lpc_cls,
+ .pg = pg
};
PREPARE (pg,
"iterate_kyc_reference",
"SELECT "
- " insufficient_funds"
- " FROM exchange_do_reserve_open_deposit"
- " ($1,$2,$3,$4,$5,$6);");
- return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
- "iterate_kyc_reference",
- params,
- rs);
+ " section_name"
+ ",provider_user_id"
+ ",legi_id"
+ " FROM FIXME"
+ " WHERE h_payto=$1;");
+ return GNUNET_PQ_eval_prepared_multi_select (pg->conn,
+ "iterate_kyc_reference",
+ params,
+ &iterate_kyc_reference_cb,
+ &ic);
}
diff --git a/src/exchangedb/pg_iterate_reserve_close_info.c b/src/exchangedb/pg_iterate_reserve_close_info.c
index e9a5f6648..c5ff61322 100644
--- a/src/exchangedb/pg_iterate_reserve_close_info.c
+++ b/src/exchangedb/pg_iterate_reserve_close_info.c
@@ -25,6 +25,70 @@
#include "pg_insert_reserve_open_deposit.h"
#include "pg_helper.h"
+/**
+ * Closure for #iterate_reserve_close_info_cb()
+ */
+struct IteratorContext
+{
+ /**
+ * Function to call with the results.
+ */
+ TALER_EXCHANGEDB_KycAmountCallback cb;
+
+ /**
+ * Closure to pass to @e cb
+ */
+ void *cb_cls;
+
+ /**
+ * Plugin context.
+ */
+ struct PostgresClosure *pg;
+};
+
+
+/**
+ * Helper function for #TEH_PG_iterate_reserve_close_info().
+ * Calls the callback with each denomination key.
+ *
+ * @param cls a `struct IteratorContext`
+ * @param result db results
+ * @param num_results number of results in @a result
+ */
+static void
+iterate_reserve_close_info_cb (void *cls,
+ PGresult *result,
+ unsigned int num_results)
+{
+ struct IteratorContext *ic = cls;
+ struct PostgresClosure *pg = ic->pg;
+
+ for (unsigned int i = 0; i<num_results; i++)
+ {
+ struct TALER_Amount amount;
+ struct GNUNET_TIME_Absolute ts;
+ struct GNUNET_PQ_ResultSpec rs[] = {
+ GNUNET_PQ_result_spec_absolute_time ("timestamp",
+ &ts),
+ TALER_PQ_RESULT_SPEC_AMOUNT ("amount",
+ &amount),
+ GNUNET_PQ_result_spec_end
+ };
+
+ if (GNUNET_OK !=
+ GNUNET_PQ_extract_result (result,
+ rs,
+ i))
+ {
+ GNUNET_break (0);
+ return;
+ }
+ ic->cb (ic->cb_cls,
+ &amount,
+ ts);
+ }
+}
+
enum GNUNET_DB_QueryStatus
TEH_PG_iterate_reserve_close_info (
@@ -35,29 +99,30 @@ TEH_PG_iterate_reserve_close_info (
void *kac_cls)
{
struct PostgresClosure *pg = cls;
- // FIXME: everything from here is copy&paste
struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (&cpi->coin_pub),
- GNUNET_PQ_query_param_uint64 (&known_coin_id),
- GNUNET_PQ_query_param_auto_from_type (coin_sig),
- GNUNET_PQ_query_param_auto_from_type (reserve_sig),
- TALER_PQ_query_param_amount (coin_total),
+ GNUNET_PQ_query_param_auto_from_type (h_payto),
+ GNUNET_PQ_query_param_absolute_time (&time_limit),
GNUNET_PQ_query_param_end
};
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_bool ("insufficient_funds",
- insufficient_funds),
- GNUNET_PQ_result_spec_end
+ struct IteratorContext ic = {
+ .cb = kac,
+ .cb_cls = kac_cls,
+ .pg = pg
};
PREPARE (pg,
- "insert_reserve_open_deposit",
- "SELECT "
- " insufficient_funds"
- " FROM exchange_do_reserve_open_deposit"
- " ($1,$2,$3,$4,$5,$6);");
- return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
- "insert_reserve_open_deposit",
- params,
- rs);
+ "iterate_reserve_close_info",
+ "SELECT"
+ " amount_val"
+ ",amount_frac"
+ ",timestamp"
+ " FROM FIXME"
+ " WHERE h_payto=$1"
+ " AND timestamp >= $2"
+ " ORDER BY timestamp DESC");
+ return GNUNET_PQ_eval_prepared_multi_select (pg->conn,
+ "iterate_reserve_close_info",
+ params,
+ &iterate_reserve_close_info_cb,
+ &ic);
}
diff --git a/src/exchangedb/pg_select_reserve_close_info.c b/src/exchangedb/pg_select_reserve_close_info.c
index 472ec27c9..a573f100d 100644
--- a/src/exchangedb/pg_select_reserve_close_info.c
+++ b/src/exchangedb/pg_select_reserve_close_info.c
@@ -34,29 +34,28 @@ TEH_PG_select_reserve_close_info (
char **payto_uri)
{
struct PostgresClosure *pg = cls;
- // FIXME: everything from here is copy*paste!
struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (&cpi->coin_pub),
- GNUNET_PQ_query_param_uint64 (&known_coin_id),
- GNUNET_PQ_query_param_auto_from_type (coin_sig),
- GNUNET_PQ_query_param_auto_from_type (reserve_sig),
- TALER_PQ_query_param_amount (coin_total),
+ GNUNET_PQ_query_param_auto_from_type (reserve_pub),
GNUNET_PQ_query_param_end
};
struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_bool ("insufficient_funds",
- insufficient_funds),
+ TALER_PQ_RESULT_SPEC_AMOUNT ("balance",
+ balance),
+ GNUNET_PQ_result_spec_string ("payto_uri",
+ payto_uri),
GNUNET_PQ_result_spec_end
};
PREPARE (pg,
- "insert_reserve_open_deposit",
+ "select_reserve_close_info",
"SELECT "
- " insufficient_funds"
- " FROM exchange_do_reserve_open_deposit"
- " ($1,$2,$3,$4,$5,$6);");
+ " balance_frac"
+ ",balance_val"
+ ",payto_uri"
+ " FROM FIXME"
+ " WHERE reserve_pub=$1;");
return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
- "insert_reserve_open_deposit",
+ "select_reserve_close_info",
params,
rs);
}