-work on DB logic
This commit is contained in:
parent
f4c8eb6a9c
commit
2dbf8cefe0
@ -1 +1 @@
|
|||||||
Subproject commit 57d96e8e123df90c804a821874fc6cb88671ab75
|
Subproject commit d402af78f6d360841db53baa46dddae13590ec33
|
@ -70,7 +70,10 @@ endif
|
|||||||
libtaler_plugin_exchangedb_postgres_la_SOURCES = \
|
libtaler_plugin_exchangedb_postgres_la_SOURCES = \
|
||||||
plugin_exchangedb_postgres.c pg_helper.h \
|
plugin_exchangedb_postgres.c pg_helper.h \
|
||||||
pg_insert_close_request.c pg_insert_close_request.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 = \
|
libtaler_plugin_exchangedb_postgres_la_LIBADD = \
|
||||||
$(LTLIBINTL)
|
$(LTLIBINTL)
|
||||||
libtaler_plugin_exchangedb_postgres_la_LDFLAGS = \
|
libtaler_plugin_exchangedb_postgres_la_LDFLAGS = \
|
||||||
|
@ -26,6 +26,75 @@
|
|||||||
#include "pg_helper.h"
|
#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
|
enum GNUNET_DB_QueryStatus
|
||||||
TEH_PG_iterate_kyc_reference (
|
TEH_PG_iterate_kyc_reference (
|
||||||
void *cls,
|
void *cls,
|
||||||
@ -38,21 +107,23 @@ TEH_PG_iterate_kyc_reference (
|
|||||||
GNUNET_PQ_query_param_auto_from_type (h_payto),
|
GNUNET_PQ_query_param_auto_from_type (h_payto),
|
||||||
GNUNET_PQ_query_param_end
|
GNUNET_PQ_query_param_end
|
||||||
};
|
};
|
||||||
// FIXME: everything from here is copy*paste
|
struct IteratorContext ic = {
|
||||||
struct GNUNET_PQ_ResultSpec rs[] = {
|
.cb = lpc,
|
||||||
GNUNET_PQ_result_spec_bool ("insufficient_funds",
|
.cb_cls = lpc_cls,
|
||||||
insufficient_funds),
|
.pg = pg
|
||||||
GNUNET_PQ_result_spec_end
|
|
||||||
};
|
};
|
||||||
|
|
||||||
PREPARE (pg,
|
PREPARE (pg,
|
||||||
"iterate_kyc_reference",
|
"iterate_kyc_reference",
|
||||||
"SELECT "
|
"SELECT "
|
||||||
" insufficient_funds"
|
" section_name"
|
||||||
" FROM exchange_do_reserve_open_deposit"
|
",provider_user_id"
|
||||||
" ($1,$2,$3,$4,$5,$6);");
|
",legi_id"
|
||||||
return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
|
" FROM FIXME"
|
||||||
"iterate_kyc_reference",
|
" WHERE h_payto=$1;");
|
||||||
params,
|
return GNUNET_PQ_eval_prepared_multi_select (pg->conn,
|
||||||
rs);
|
"iterate_kyc_reference",
|
||||||
|
params,
|
||||||
|
&iterate_kyc_reference_cb,
|
||||||
|
&ic);
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,70 @@
|
|||||||
#include "pg_insert_reserve_open_deposit.h"
|
#include "pg_insert_reserve_open_deposit.h"
|
||||||
#include "pg_helper.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
|
enum GNUNET_DB_QueryStatus
|
||||||
TEH_PG_iterate_reserve_close_info (
|
TEH_PG_iterate_reserve_close_info (
|
||||||
@ -35,29 +99,30 @@ TEH_PG_iterate_reserve_close_info (
|
|||||||
void *kac_cls)
|
void *kac_cls)
|
||||||
{
|
{
|
||||||
struct PostgresClosure *pg = cls;
|
struct PostgresClosure *pg = cls;
|
||||||
// FIXME: everything from here is copy&paste
|
|
||||||
struct GNUNET_PQ_QueryParam params[] = {
|
struct GNUNET_PQ_QueryParam params[] = {
|
||||||
GNUNET_PQ_query_param_auto_from_type (&cpi->coin_pub),
|
GNUNET_PQ_query_param_auto_from_type (h_payto),
|
||||||
GNUNET_PQ_query_param_uint64 (&known_coin_id),
|
GNUNET_PQ_query_param_absolute_time (&time_limit),
|
||||||
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_end
|
GNUNET_PQ_query_param_end
|
||||||
};
|
};
|
||||||
struct GNUNET_PQ_ResultSpec rs[] = {
|
struct IteratorContext ic = {
|
||||||
GNUNET_PQ_result_spec_bool ("insufficient_funds",
|
.cb = kac,
|
||||||
insufficient_funds),
|
.cb_cls = kac_cls,
|
||||||
GNUNET_PQ_result_spec_end
|
.pg = pg
|
||||||
};
|
};
|
||||||
|
|
||||||
PREPARE (pg,
|
PREPARE (pg,
|
||||||
"insert_reserve_open_deposit",
|
"iterate_reserve_close_info",
|
||||||
"SELECT "
|
"SELECT"
|
||||||
" insufficient_funds"
|
" amount_val"
|
||||||
" FROM exchange_do_reserve_open_deposit"
|
",amount_frac"
|
||||||
" ($1,$2,$3,$4,$5,$6);");
|
",timestamp"
|
||||||
return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
|
" FROM FIXME"
|
||||||
"insert_reserve_open_deposit",
|
" WHERE h_payto=$1"
|
||||||
params,
|
" AND timestamp >= $2"
|
||||||
rs);
|
" ORDER BY timestamp DESC");
|
||||||
|
return GNUNET_PQ_eval_prepared_multi_select (pg->conn,
|
||||||
|
"iterate_reserve_close_info",
|
||||||
|
params,
|
||||||
|
&iterate_reserve_close_info_cb,
|
||||||
|
&ic);
|
||||||
}
|
}
|
||||||
|
@ -34,29 +34,28 @@ TEH_PG_select_reserve_close_info (
|
|||||||
char **payto_uri)
|
char **payto_uri)
|
||||||
{
|
{
|
||||||
struct PostgresClosure *pg = cls;
|
struct PostgresClosure *pg = cls;
|
||||||
// FIXME: everything from here is copy*paste!
|
|
||||||
struct GNUNET_PQ_QueryParam params[] = {
|
struct GNUNET_PQ_QueryParam params[] = {
|
||||||
GNUNET_PQ_query_param_auto_from_type (&cpi->coin_pub),
|
GNUNET_PQ_query_param_auto_from_type (reserve_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_end
|
GNUNET_PQ_query_param_end
|
||||||
};
|
};
|
||||||
struct GNUNET_PQ_ResultSpec rs[] = {
|
struct GNUNET_PQ_ResultSpec rs[] = {
|
||||||
GNUNET_PQ_result_spec_bool ("insufficient_funds",
|
TALER_PQ_RESULT_SPEC_AMOUNT ("balance",
|
||||||
insufficient_funds),
|
balance),
|
||||||
|
GNUNET_PQ_result_spec_string ("payto_uri",
|
||||||
|
payto_uri),
|
||||||
GNUNET_PQ_result_spec_end
|
GNUNET_PQ_result_spec_end
|
||||||
};
|
};
|
||||||
|
|
||||||
PREPARE (pg,
|
PREPARE (pg,
|
||||||
"insert_reserve_open_deposit",
|
"select_reserve_close_info",
|
||||||
"SELECT "
|
"SELECT "
|
||||||
" insufficient_funds"
|
" balance_frac"
|
||||||
" FROM exchange_do_reserve_open_deposit"
|
",balance_val"
|
||||||
" ($1,$2,$3,$4,$5,$6);");
|
",payto_uri"
|
||||||
|
" FROM FIXME"
|
||||||
|
" WHERE reserve_pub=$1;");
|
||||||
return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
|
return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
|
||||||
"insert_reserve_open_deposit",
|
"select_reserve_close_info",
|
||||||
params,
|
params,
|
||||||
rs);
|
rs);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user