mintdb postgres; implement get_coin_transactions (deposit)
This commit is contained in:
parent
d7e38031a9
commit
01554ef865
@ -624,6 +624,22 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
"(merchant_pub = $3)"
|
"(merchant_pub = $3)"
|
||||||
")",
|
")",
|
||||||
3, NULL);
|
3, NULL);
|
||||||
|
PREPARE ("get_deposit_with_coin_pub",
|
||||||
|
"SELECT "
|
||||||
|
"coin_pub,"
|
||||||
|
"denom_pub,"
|
||||||
|
"transaction_id,"
|
||||||
|
"amount_value,"
|
||||||
|
"amount_fraction,"
|
||||||
|
"amount_currency,"
|
||||||
|
"merchant_pub,"
|
||||||
|
"h_contract,"
|
||||||
|
"h_wire,"
|
||||||
|
"wire,"
|
||||||
|
"coin_sig"
|
||||||
|
" FROM deposits WHERE "
|
||||||
|
" coin_pub = $1",
|
||||||
|
1, NULL);
|
||||||
return GNUNET_OK;
|
return GNUNET_OK;
|
||||||
#undef PREPARE
|
#undef PREPARE
|
||||||
}
|
}
|
||||||
@ -2399,8 +2415,99 @@ postgres_get_coin_transactions (void *cls,
|
|||||||
struct TALER_MINTDB_Session *session,
|
struct TALER_MINTDB_Session *session,
|
||||||
const union TALER_CoinSpendPublicKeyP *coin_pub)
|
const union TALER_CoinSpendPublicKeyP *coin_pub)
|
||||||
{
|
{
|
||||||
|
PGresult *result;
|
||||||
|
struct TALER_MINTDB_TransactionList *head;
|
||||||
|
struct TALER_MINTDB_TransactionList *tl;
|
||||||
|
int nrows;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
result = NULL;
|
||||||
|
head = NULL;
|
||||||
|
tl = NULL;
|
||||||
|
nrows = 0;
|
||||||
|
ret = GNUNET_SYSERR;
|
||||||
|
|
||||||
|
/* check deposits */
|
||||||
|
{
|
||||||
|
struct TALER_MINTDB_Deposit *deposit;
|
||||||
|
struct TALER_PQ_QueryParam params[] = {
|
||||||
|
TALER_PQ_QUERY_PARAM_PTR (&coin_pub->ecdsa_pub),
|
||||||
|
TALER_PQ_QUERY_PARAM_END
|
||||||
|
};
|
||||||
|
json_error_t json_error;
|
||||||
|
char *json_wire_enc;
|
||||||
|
size_t json_wire_enc_size;
|
||||||
|
int i;
|
||||||
|
result = TALER_PQ_exec_prepared (session->conn,
|
||||||
|
"get_deposit_with_coin_pub",
|
||||||
|
params);
|
||||||
|
if (PGRES_TUPLES_OK != PQresultStatus (result))
|
||||||
|
{
|
||||||
|
QUERY_ERR (result);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
nrows = PQntuples (result);
|
||||||
|
for (i=0; i < nrows; i++)
|
||||||
|
{
|
||||||
|
deposit = GNUNET_new (struct TALER_MINTDB_Deposit);
|
||||||
|
struct TALER_PQ_ResultSpec rs[] = {
|
||||||
|
TALER_PQ_RESULT_SPEC ("coin_pub", &deposit->coin),
|
||||||
|
TALER_PQ_RESULT_SPEC ("coin_sig", &deposit->csig),
|
||||||
|
TALER_PQ_RESULT_SPEC ("merchant_pub", &deposit->merchant_pub),
|
||||||
|
TALER_PQ_RESULT_SPEC ("h_contract", &deposit->h_contract),
|
||||||
|
TALER_PQ_RESULT_SPEC ("h_wire", &deposit->h_wire),
|
||||||
|
TALER_PQ_RESULT_SPEC_VAR ("wire", &json_wire_enc, &json_wire_enc_size),
|
||||||
|
TALER_PQ_RESULT_SPEC ("transaction_id", &deposit->transaction_id),
|
||||||
|
/** FIXME:
|
||||||
|
* TALER_PQ_RESULT_SPEC ("timestamp", &deposit->timestamp),
|
||||||
|
* TALER_PQ_RESULT_SPEC ("refund_deadline", &deposit->refund_deadline),
|
||||||
|
* TALER_PQ_RESULT_SPEC ("deposit_fee", &deposit->deposit_fee)
|
||||||
|
*/
|
||||||
|
TALER_PQ_RESULT_SPEC_END
|
||||||
|
};
|
||||||
|
if ((GNUNET_OK != TALER_PQ_extract_result (result, rs, i))
|
||||||
|
|| (GNUNET_OK != TALER_PQ_extract_amount (result,
|
||||||
|
i,
|
||||||
|
"amount_value",
|
||||||
|
"amount_fraction",
|
||||||
|
"amount_currency",
|
||||||
|
&deposit->amount_with_fee)))
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
goto cleanup_deposit;
|
||||||
|
}
|
||||||
|
deposit->wire = json_loads (json_wire_enc,
|
||||||
|
JSON_REJECT_DUPLICATES,
|
||||||
|
&json_error);
|
||||||
|
if (NULL == deposit->wire)
|
||||||
|
{
|
||||||
|
TALER_json_warn (json_error);
|
||||||
|
goto cleanup_deposit;
|
||||||
|
}
|
||||||
|
GNUNET_free (json_wire_enc);
|
||||||
|
json_wire_enc = NULL;
|
||||||
|
deposit->transaction_id = GNUNET_ntohll (deposit->transaction_id);
|
||||||
|
tl = GNUNET_new (struct TALER_MINTDB_TransactionList);
|
||||||
|
tl->type = TALER_MINTDB_TT_DEPOSIT;
|
||||||
|
tl->details.deposit = deposit;
|
||||||
|
deposit = NULL;
|
||||||
|
continue;
|
||||||
|
cleanup_deposit:
|
||||||
|
GNUNET_free_non_null (json_wire_enc);
|
||||||
|
GNUNET_free_non_null (deposit);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
}
|
||||||
// FIXME: check logic!
|
// FIXME: check logic!
|
||||||
GNUNET_break (0); // FIXME: implement!
|
/* We need to get this information from 3 tables:
|
||||||
|
1. Deposits
|
||||||
|
2. Coins used in for refreshing
|
||||||
|
3. locked coins (locking is not implemented as of now) */
|
||||||
|
cleanup:
|
||||||
|
if (GNUNET_OK == ret)
|
||||||
|
return head;
|
||||||
|
if (NULL != head)
|
||||||
|
common_free_coin_transaction_list (cls, head);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user