From 5a43e5e38bea77d63074a8db9a319e3ff77fd75a Mon Sep 17 00:00:00 2001 From: Santo Cariotti Date: Sat, 10 Sep 2022 11:11:35 +0200 Subject: Add pagination --- src/models/user.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src/models/user.rs') diff --git a/src/models/user.rs b/src/models/user.rs index 71b35b6..22bd130 100644 --- a/src/models/user.rs +++ b/src/models/user.rs @@ -1,3 +1,4 @@ +use crate::config::PAGE_LIMIT; use crate::db::get_client; use crate::errors::AppError; @@ -113,15 +114,29 @@ impl User { } /// List all users - pub async fn list() -> Result, AppError> { + pub async fn list(page: i64) -> Result, AppError> { let pool = unsafe { get_client() }; let rows = sqlx::query_as!( UserList, - r#"SELECT id, email, username, is_staff FROM users"# + r#"SELECT id, email, username, is_staff FROM users + LIMIT $1 OFFSET $2 + "#, + PAGE_LIMIT, + PAGE_LIMIT * page ) .fetch_all(pool) .await?; Ok(rows) } + + /// Return the number of users. + pub async fn count() -> Result { + let pool = unsafe { get_client() }; + let row = sqlx::query!(r#"SELECT COUNT(id) as count FROM users"#) + .fetch_one(pool) + .await?; + + Ok(row.count.unwrap()) + } } -- cgit v1.2.3-71-g8e6c