diff --git a/controller/src/user/api.rs b/controller/src/user/api.rs index 67397d9..861db83 100644 --- a/controller/src/user/api.rs +++ b/controller/src/user/api.rs @@ -82,42 +82,26 @@ async fn list_users( let limit = rqctx.page_limit(&pag_params)?.get() as usize; let pg = rqctx.context().pg_pool.to_owned(); - let users = match &pag_params.page { - WhichPage::First(..) => { - tracing::debug!("Listing users. First page"); - sqlx::query!(r#"SELECT * FROM users ORDER BY id LIMIT $1"#, limit as i64) - .fetch_all(&pg) - .await - .map_err(|e| HttpError::for_internal_error(format!("Error: {}", e)))? - .into_iter() - .map(|rec| User { - id: rec.id, - name: rec.name, - }) - .collect() - } - WhichPage::Next(UserPage { user_id: last_seen }) => { - tracing::debug!( - last_seen = last_seen.to_string(), - "Listing users. Next page" - ); - sqlx::query!( - r#"SELECT * FROM users WHERE id > $1 ORDER BY id LIMIT $2"#, - last_seen, - limit as i64 - ) - .fetch_all(&pg) - .await - .map_err(|e| HttpError::for_internal_error(format!("Error: {}", e)))? - .into_iter() - .map(|rec| User { - id: rec.id, - name: rec.name, - }) - .collect() - } + let q = match &pag_params.page { + WhichPage::First(..) => None, + WhichPage::Next(UserPage { user_id: last_seen }) => Some(last_seen), }; + let users = sqlx::query!( + r#"SELECT * FROM users WHERE id > coalesce($1, '00000000-0000-0000-0000-000000000000'::UUID) ORDER BY id LIMIT $2"#, + q, + limit as i64 + ) + .fetch_all(&pg) + .await + .map_err(|e| HttpError::for_internal_error(format!("Error: {}", e)))? + .into_iter() + .map(|rec| User { + id: rec.id, + name: rec.name, + }) + .collect(); + Ok(HttpResponseOk(ResultsPage::new( users, &EmptyScanParams {},