|
[ol]pub async fn get_order_list(&self, mobile: String, token: Option, db: Arc, req_encrypt: EncryptedMessage, ) -> Result { 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); }[/ol]复制代码
这个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。经过引导能正确给出
[ol] 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;[/ol]复制代码

|
|