diff --git a/src/db.rs b/src/db.rs index 7138507..b428265 100644 --- a/src/db.rs +++ b/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, 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, diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs index e757139..8199deb 100644 --- a/src/handlers/mod.rs +++ b/src/handlers/mod.rs @@ -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; diff --git a/src/handlers/payment.rs b/src/handlers/payment.rs index d121a0e..228905f 100644 --- a/src/handlers/payment.rs +++ b/src/handlers/payment.rs @@ -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, + claims: web::ReqData, +) -> Result { + 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::>() + }))) +} + /// GET /api/user/quota #[get("/api/user/quota")] pub async fn get_user_quota( diff --git a/src/main.rs b/src/main.rs index be02909..99b496f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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)