feat: 添加 GET /api/payment/orders 接口,返回用户订单记录

This commit is contained in:
2026-05-07 17:12:31 +08:00
parent a05b46dfe2
commit 228a9f3b3b
4 changed files with 45 additions and 1 deletions

View File

@@ -317,6 +317,26 @@ pub async fn update_user_profile(
// ===== 支付系统 DB 函数 =====
/// 创建待支付订单
pub async fn get_user_orders(
pool: &PgPool,
user_id: i32,
) -> Result<Vec<crate::models::PaymentOrder>, AppError> {
let rows = sqlx::query_as::<_, crate::models::PaymentOrder>(
r#"
SELECT id, user_id, order_no, package_type, amount, status, paid_at, expires_at, created_at
FROM payment_orders
WHERE user_id = $1
ORDER BY created_at DESC
"#,
)
.bind(user_id)
.fetch_all(pool)
.await
.map_err(|e| AppError::Database(format!("查询订单失败: {}", e)))?;
Ok(rows)
}
pub async fn create_payment_order(
pool: &PgPool,
user_id: i32,

View File

@@ -42,6 +42,7 @@ pub use payment::generate_code;
pub use payment::get_user_quota;
pub use payment::mock_confirm;
pub use payment::sync_order;
pub use payment::get_user_orders;
pub use payment::payment_index;
pub use payment::payment_login_status;
pub use payment::payment_page;

View File

@@ -973,6 +973,28 @@ pub async fn sync_order(
})))
}
/// GET /api/payment/orders — 获取当前用户的订单记录
#[get("/api/payment/orders")]
pub async fn get_user_orders(
pool: web::Data<PgPool>,
claims: web::ReqData<Claims>,
) -> Result<HttpResponse, AppError> {
let orders = db::get_user_orders(pool.get_ref(), claims.user_id).await?;
Ok(HttpResponse::Ok().json(serde_json::json!({
"success": true,
"data": orders.iter().map(|o| serde_json::json!({
"order_no": o.order_no,
"package_type": o.package_type,
"amount": o.amount,
"status": o.status,
"paid_at": o.paid_at,
"expires_at": o.expires_at,
"created_at": o.created_at,
})).collect::<Vec<_>>()
})))
}
/// GET /api/user/quota
#[get("/api/user/quota")]
pub async fn get_user_quota(

View File

@@ -21,7 +21,7 @@ use handlers::{
admin_get_user, admin_update_user_payment, add_favorite, alipay_notify, alipay_pay_page,
create_order, delete_weather, generate_code, generate_temp_token_handler, get_current_user_profile,
get_favorites, get_user_quota, get_weather_brief, get_weather_details,
health_check, login, mock_login, mock_confirm, sync_order, payment_index, payment_login_status, payment_page, payment_success,
get_user_orders, health_check, login, mock_login, mock_confirm, sync_order, payment_index, payment_login_status, payment_page, payment_success,
post_weather_data,
refresh_token, remove_favorite, root, save_user_profile, serve_static_files,
web_generate_login_code, web_login_confirm, web_login_auto_confirm,
@@ -97,6 +97,7 @@ fn create_server_config(
.service(create_order)
.service(mock_confirm)
.service(sync_order)
.service(get_user_orders)
.service(get_user_quota)
.service(get_favorites)
.service(add_favorite)