Compare commits

..

1 commit

Author SHA1 Message Date
d3460ecbab
feat: Add user resource w/database as storage 2025-01-14 00:13:37 +01:00

View file

@ -82,26 +82,42 @@ async fn list_users(
let limit = rqctx.page_limit(&pag_params)?.get() as usize;
let pg = rqctx.context().pg_pool.to_owned();
let q = match &pag_params.page {
WhichPage::First(..) => None,
WhichPage::Next(UserPage { user_id: last_seen }) => Some(last_seen),
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 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 {},