|
- pub async fn get_order_list(&self,
- mobile: String,
- token: Option<String>,
- db: Arc<DatabaseConnection>,
- req_encrypt: EncryptedMessage,
- ) -> Result<impl Reply, Rejection> {
- let mut query = Payments::find();
- let decrypted_message = EncryptedMessage::decrypt_message(
- &req_encrypt,
- &token.clone().unwrap_or_default(),
- )
- .map_err(|e| {
- eprintln!("Decryption error: {}", e);
- warp::reject::custom(crate::models::utils::DatabaseError("Decryption failed".into()))
- })?;
- let req:QueryOrderRequest = serde_json::from_str(&decrypted_message).map_err(|e| {
- eprintln!("Deserialization error: {}", e);
- warp::reject::custom(crate::models::utils::DatabaseError("Invalid request format".into()))
- })?;
- let user = match User::find()
- .filter(user::Column::Username.contains(mobile.as_str()))
- .one(&*db)
- .await
- {
- Ok(Some(emp)) => emp,
- Ok(None) => {
- return Ok(send_error_message(404,"failed".to_string(),"404 - 用户不存在".to_string(),None));
- }
- Err(e) => {
- eprintln!("DB query error: {:?}", e);
- return Ok(send_error_message(404,"failed".to_string(),"404 - 数据库查询失败".to_string(),None));
- }
- };
- let order_list_result = query
- .filter(Payments::Column::UserId.contains(user.id.to_string()))
- .limit(req.limit)
- .offset(req.page * req.limit)
- .all(&*db)
- .await;
- let order_list = match order_list_result {
- Ok(order_list) => order_list,
- Err(e) => {
- eprintln!("DB query error: {:?}", e);
- return Ok(send_error_message(404,"failed".to_string(),"404 - 数据库查询失败".to_string(),None));
- }
- };
- let total_result = Payments::find()
- .filter(Payments::Column::UserId.contains(user.id.to_string()))
- .count()
- .all(&*db);
-
- }
复制代码
这个rust的 let total_result = Payments::find()
.filter(Payments::Column::UserId.contains(user.id.to_string()))
.count()
.all(&*db);
是错误的。请帮我纠正它
如果 得出。
let total_result = Payments::find()
.filter(Payments::Column::UserId.eq(user.id)) // 使用eq匹配数值类型,移除不必要的字符串转换
.count(&*db) // 直接执行计数查询
.await; // 异步等待结果
这就是错误的。实际上编译不过去。count 方法缺少引用。
你问它是不是缺少引用。然后就一本正经的胡说八道了。
GPT。经过引导能正确给出
- let page = req.page; // 默认第 1 页
- let page_size = req.limit; // 默认每页 10 条
- // 创建分页器
- let paginator = query.paginate(&*db, page_size as u64);
- // 获取总数
- let total = paginator
- .num_items()
- .await
- .map_err(|e| {
- eprintln!("Error fetching total count: {}", e);
- return Ok(send_error_message(404,"failed".to_string(),"404 - 数据库查询失败".to_string(),None));
- })?;
- // 获取当前页的员工列表
- let order_list_result = paginator
- .fetch_page((page - 1) as usize as u64) // page-1 因为 fetch_page 从 0 开始
- .await;
复制代码

|
|