Merge pull request #522 from RWDai/fix/admin-users-server-pagination

Fix admin users server-side pagination
This commit is contained in:
fawney19
2026-05-20 18:03:11 +08:00
committed by GitHub
14 changed files with 427 additions and 132 deletions
@@ -42,6 +42,13 @@ impl<'a> AdminAppState<'a> {
self.app.list_export_users_page(query).await
}
pub(crate) async fn count_export_users(
&self,
query: &aether_data::repository::users::UserExportListQuery,
) -> Result<u64, GatewayError> {
self.app.count_export_users(query).await
}
pub(crate) async fn find_export_user_by_id(
&self,
user_id: &str,
@@ -37,16 +37,20 @@ pub(in super::super) async fn build_admin_list_users_response(
.map(|value| value.trim().to_string())
.filter(|value| !value.is_empty());
let paged_rows = state
.list_export_users_page(&aether_data::repository::users::UserExportListQuery {
skip,
limit,
role: role.clone(),
is_active,
search,
group_id,
})
.await?;
let query = aether_data::repository::users::UserExportListQuery {
skip,
limit,
role: role.clone(),
is_active,
search,
group_id,
};
let (paged_rows_result, total_result) = tokio::join!(
state.list_export_users_page(&query),
state.count_export_users(&query),
);
let paged_rows = paged_rows_result?;
let total = total_result?;
let user_ids = paged_rows
.iter()
.map(|row| row.id.clone())
@@ -116,7 +120,15 @@ pub(in super::super) async fn build_admin_list_users_response(
));
}
Ok(Json(payload).into_response())
let has_more = (skip as u64).saturating_add(payload.len() as u64) < total;
Ok(Json(json!({
"items": payload,
"total": total,
"skip": skip,
"limit": limit,
"has_more": has_more,
}))
.into_response())
}
pub(in super::super) async fn build_admin_get_user_response(