-implement purses get db sketch
This commit is contained in:
parent
a92d3aae7b
commit
efb8c8037b
@ -1 +1 @@
|
|||||||
Subproject commit fbd5974fba30cab15ef1b7454a5a609286c71508
|
Subproject commit 0172bed41a8fdfc4ef2511e311441120a3d2572d
|
@ -295,7 +295,6 @@ TEH_handler_purses_get (struct TEH_RequestContext *rc,
|
|||||||
}
|
}
|
||||||
} /* end first-time initialization */
|
} /* end first-time initialization */
|
||||||
|
|
||||||
#if FIXME
|
|
||||||
{
|
{
|
||||||
enum GNUNET_DB_QueryStatus qs;
|
enum GNUNET_DB_QueryStatus qs;
|
||||||
|
|
||||||
@ -324,21 +323,20 @@ TEH_handler_purses_get (struct TEH_RequestContext *rc,
|
|||||||
case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS:
|
case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS:
|
||||||
return TALER_MHD_reply_with_error (rc->connection,
|
return TALER_MHD_reply_with_error (rc->connection,
|
||||||
MHD_HTTP_NOT_FOUND,
|
MHD_HTTP_NOT_FOUND,
|
||||||
TALER_EC_EXCHANGE_PURSE_UNKNOWN,
|
TALER_EC_EXCHANGE_GENERIC_PURSE_UNKNOWN,
|
||||||
NULL);
|
NULL);
|
||||||
case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT:
|
case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT:
|
||||||
break; /* handled below */
|
break; /* handled below */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (GNUNET_TIME_absolute_is_past (gc->purse_expiration))
|
if (GNUNET_TIME_absolute_is_past (gc->purse_expiration.abs_time))
|
||||||
{
|
{
|
||||||
return TALER_MHD_reply_with_error (rc->connection,
|
return TALER_MHD_reply_with_error (rc->connection,
|
||||||
MHD_HTTP_GONE,
|
MHD_HTTP_GONE,
|
||||||
TALER_EC_EXCHANGE_PURSE_EXPIRED,
|
TALER_EC_EXCHANGE_GENERIC_PURSE_EXPIRED,
|
||||||
GNUNET_TIME_timestamp2s (
|
GNUNET_TIME_timestamp2s (
|
||||||
gc->purse_expiration));
|
gc->purse_expiration));
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
// FIXME: compare amount to deposited amount;
|
// FIXME: compare amount to deposited amount;
|
||||||
// if below, set 'deposit_timestamp' to zero!
|
// if below, set 'deposit_timestamp' to zero!
|
||||||
|
@ -13351,6 +13351,74 @@ postgres_insert_purse_request (
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function called to obtain information about a purse.
|
||||||
|
*
|
||||||
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
|
* @param purse_pub public key of the new purse
|
||||||
|
* @param[out] purse_expiration set to time when the purse will expire
|
||||||
|
* @param[out] amount set to target amount (with fees) to be put into the purse
|
||||||
|
* @param[out] deposited set to actual amount put into the purse so far
|
||||||
|
* @param[out] h_contract_terms set to hash of the contract for the purse
|
||||||
|
* @param[out] merge_timestamp set to time when the purse was merged, or NEVER if not
|
||||||
|
* @param[out] deposit_timestamp set to time when the deposited amount reached the target amount, or NEVER if not
|
||||||
|
* @return transaction status code
|
||||||
|
*/
|
||||||
|
static enum GNUNET_DB_QueryStatus
|
||||||
|
postgres_select_purse (
|
||||||
|
void *cls,
|
||||||
|
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
||||||
|
struct GNUNET_TIME_Timestamp *purse_expiration,
|
||||||
|
struct TALER_Amount *amount,
|
||||||
|
struct TALER_Amount *deposited,
|
||||||
|
struct TALER_PrivateContractHashP *h_contract_terms,
|
||||||
|
struct GNUNET_TIME_Timestamp *merge_timestamp,
|
||||||
|
struct GNUNET_TIME_Timestamp *deposit_timestamp)
|
||||||
|
{
|
||||||
|
struct PostgresClosure *pg = cls;
|
||||||
|
struct GNUNET_PQ_QueryParam params[] = {
|
||||||
|
GNUNET_PQ_query_param_auto_from_type (purse_pub),
|
||||||
|
GNUNET_PQ_query_param_end
|
||||||
|
};
|
||||||
|
struct GNUNET_PQ_ResultSpec rs[] = {
|
||||||
|
GNUNET_PQ_result_spec_timestamp ("purse_expiration",
|
||||||
|
purse_expiration),
|
||||||
|
TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
|
||||||
|
amount),
|
||||||
|
TALER_PQ_RESULT_SPEC_AMOUNT ("balance",
|
||||||
|
deposited),
|
||||||
|
GNUNET_PQ_result_spec_auto_from_type ("h_contract_terms",
|
||||||
|
h_contract_terms),
|
||||||
|
GNUNET_PQ_result_spec_allow_null (
|
||||||
|
GNUNET_PQ_result_spec_timestamp ("merge_timestamp",
|
||||||
|
merge_timestamp),
|
||||||
|
NULL),
|
||||||
|
GNUNET_PQ_result_spec_allow_null (
|
||||||
|
GNUNET_PQ_result_spec_timestamp ("deposit_timestamp",
|
||||||
|
deposit_timestamp),
|
||||||
|
NULL),
|
||||||
|
GNUNET_PQ_result_spec_end
|
||||||
|
};
|
||||||
|
enum GNUNET_DB_QueryStatus qs;
|
||||||
|
|
||||||
|
*merge_timestamp = GNUNET_TIME_UNIT_FOREVER_TS;
|
||||||
|
*deposit_timestamp = GNUNET_TIME_UNIT_FOREVER_TS;
|
||||||
|
qs = GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
|
||||||
|
"select_purse_request",
|
||||||
|
params,
|
||||||
|
rs);
|
||||||
|
if ( (qs > 0) &&
|
||||||
|
(0 <
|
||||||
|
TALER_amount_cmp (amount,
|
||||||
|
deposited)) )
|
||||||
|
{
|
||||||
|
/* not yet enough */
|
||||||
|
*deposit_timestamp = GNUNET_TIME_UNIT_FOREVER_TS;
|
||||||
|
}
|
||||||
|
return qs;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function called to return meta data about a purse by the
|
* Function called to return meta data about a purse by the
|
||||||
* merge capability key.
|
* merge capability key.
|
||||||
@ -14021,6 +14089,8 @@ libtaler_plugin_exchangedb_postgres_init (void *cls)
|
|||||||
= &postgres_insert_purse_request;
|
= &postgres_insert_purse_request;
|
||||||
plugin->select_purse_request
|
plugin->select_purse_request
|
||||||
= &postgres_select_purse_request;
|
= &postgres_select_purse_request;
|
||||||
|
plugin->select_purse
|
||||||
|
= &postgres_select_purse;
|
||||||
plugin->select_purse_by_merge_pub
|
plugin->select_purse_by_merge_pub
|
||||||
= &postgres_select_purse_by_merge_pub;
|
= &postgres_select_purse_by_merge_pub;
|
||||||
plugin->do_purse_deposit
|
plugin->do_purse_deposit
|
||||||
|
@ -4546,6 +4546,31 @@ struct TALER_EXCHANGEDB_Plugin
|
|||||||
bool *in_conflict);
|
bool *in_conflict);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function called to obtain information about a purse.
|
||||||
|
*
|
||||||
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
|
* @param purse_pub public key of the new purse
|
||||||
|
* @param[out] purse_expiration set to time when the purse will expire
|
||||||
|
* @param[out] amount set to target amount (with fees) to be put into the purse
|
||||||
|
* @param[out] deposited set to actual amount put into the purse so far
|
||||||
|
* @param[out] h_contract_terms set to hash of the contract for the purse
|
||||||
|
* @param[out] merge_timestamp set to time when the purse was merged, or NEVER if not
|
||||||
|
* @param[out] deposit_timestamp set to time when the deposited amount reached the target amount, or NEVER if not
|
||||||
|
* @return transaction status code
|
||||||
|
*/
|
||||||
|
enum GNUNET_DB_QueryStatus
|
||||||
|
(*select_purse)(
|
||||||
|
void *cls,
|
||||||
|
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
||||||
|
struct GNUNET_TIME_Timestamp *purse_expiration,
|
||||||
|
struct TALER_Amount *amount,
|
||||||
|
struct TALER_Amount *deposited,
|
||||||
|
struct TALER_PrivateContractHashP *h_contract_terms,
|
||||||
|
struct GNUNET_TIME_Timestamp *merge_timestamp,
|
||||||
|
struct GNUNET_TIME_Timestamp *deposit_timestamp);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function called to reutrn meta data about a purse by the
|
* Function called to reutrn meta data about a purse by the
|
||||||
* purse public key.
|
* purse public key.
|
||||||
|
Loading…
Reference in New Issue
Block a user