From fdbc7ed756ce455c956dd7a5885db6b6eabfd578 Mon Sep 17 00:00:00 2001 From: mrw1593 Date: Sat, 13 May 2023 13:49:56 -0400 Subject: Add the ability to search users --- src/api/users.rs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/api/users.rs') diff --git a/src/api/users.rs b/src/api/users.rs index 6e00336..b2dd1c7 100644 --- a/src/api/users.rs +++ b/src/api/users.rs @@ -23,6 +23,41 @@ impl From for UserResponse { } } +#[get("/")] +async fn search_users( + web::Query(username): web::Query>>, + web::Query(limit): web::Query>, + web::Query(offset): web::Query>, + conn: web::Data, +) -> HttpResponse { + let conn = conn.get_ref(); + + let username = username.unwrap_or_default(); + let offset = offset.unwrap_or_default(); + + let results: Box<[UserResponse]> = if let Some(limit) = limit { + db::search_users_limit(conn, &username, offset, limit) + .await + .unwrap() + .iter() + .cloned() + .map(|u| u.into()) + .collect() + } else { + db::search_users(conn, &username) + .await + .unwrap() + .into_iter() + .skip(offset as usize) + .cloned() + .map(|u| u.into()) + .collect() + }; + + let response = HttpResponse::Ok().json(results); + response +} + #[derive(Debug, Clone, Error)] #[error("No user with the given ID exists")] struct UserNotFoundError { @@ -224,6 +259,7 @@ async fn update_password( pub fn service() -> Scope { web::scope("/users") + .service(search_users) .service(get_user) .service(get_username) .service(create_user) -- cgit v1.2.3