fix(billing): 复用待支付套餐订单

This commit is contained in:
Entropy.Xu
2026-05-28 23:09:36 +08:00
parent ef2953038e
commit 906742e3c4
12 changed files with 636 additions and 1 deletions
@@ -715,6 +715,21 @@ impl GatewayDataState {
}
}
pub(crate) async fn find_pending_plan_purchase_order_by_user_id(
&self,
user_id: &str,
product_id: &str,
) -> Result<Option<StoredAdminPaymentOrder>, DataLayerError> {
match &self.wallet_reader {
Some(repository) => {
repository
.find_pending_plan_purchase_order_by_user_id(user_id, product_id)
.await
}
None => Ok(None),
}
}
pub(crate) async fn find_wallet_refund(
&self,
wallet_id: &str,
@@ -958,6 +958,64 @@ impl GatewayDataState {
}
}
#[cfg(test)]
pub(crate) fn with_user_billing_and_wallet_for_tests<T>(
user_repository: Arc<dyn UserReadRepository>,
billing_repository: Arc<dyn BillingReadRepository>,
wallet_repository: Arc<T>,
) -> Self
where
T: aether_data::repository::wallet::WalletRepository + 'static,
{
let wallet_reader: Arc<dyn WalletReadRepository> = wallet_repository.clone();
let wallet_writer: Arc<dyn WalletWriteRepository> = wallet_repository;
Self {
config: GatewayDataConfig::disabled(),
backends: None,
auth_api_key_reader: None,
auth_api_key_writer: None,
auth_module_reader: None,
auth_module_writer: None,
announcement_reader: None,
announcement_writer: None,
management_token_reader: None,
management_token_writer: None,
oauth_provider_reader: None,
oauth_provider_writer: None,
proxy_node_reader: None,
proxy_node_writer: None,
billing_reader: Some(billing_repository),
gemini_file_mapping_reader: None,
gemini_file_mapping_writer: None,
global_model_reader: None,
global_model_writer: None,
minimal_candidate_selection_reader: None,
request_candidate_reader: None,
request_candidate_writer: None,
provider_catalog_reader: None,
provider_catalog_writer: None,
pool_score_reader: None,
pool_score_writer: None,
provider_quota_reader: None,
provider_quota_writer: None,
routing_group_reader: None,
routing_group_writer: None,
usage_reader: None,
usage_writer: None,
user_reader: Some(user_repository),
user_preferences: None,
usage_worker_queue: None,
video_task_reader: None,
video_task_writer: None,
background_task_reader: None,
background_task_writer: None,
wallet_reader: Some(wallet_reader),
wallet_writer: Some(wallet_writer),
settlement_writer: None,
system_config_values: None,
}
}
#[cfg(test)]
pub(crate) fn with_user_wallet_and_usage_for_tests<TUsage, TWallet>(
user_repository: Arc<dyn UserReadRepository>,