feat: 添加 GET /api/payment/orders 接口,返回用户订单记录
This commit is contained in:
20
src/db.rs
20
src/db.rs
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user