feat: user search (#6302)

* feat: user search

* refactor: use sqlx macro

* refactor: better name for escaped query

* style: cleanup unused import

* chore: update sqlx query cache

* fix: tests

---------

Co-authored-by: sychic <47618543+Sychic@users.noreply.github.com>
This commit is contained in:
Calum H.
2026-06-03 19:38:24 +00:00
committed by GitHub
co-authored by sychic
parent d907083d83
commit 58ad58f958
6 changed files with 237 additions and 2 deletions
+21
View File
@@ -39,6 +39,7 @@ use validator::Validate;
pub fn config(cfg: &mut web::ServiceConfig) {
cfg.route("user", web::get().to(user_auth_get));
cfg.route("users", web::get().to(users_get));
cfg.route("users/search", web::get().to(users_search));
cfg.route("user_email", web::get().to(admin_user_email));
cfg.service(
@@ -327,6 +328,26 @@ pub struct UserIds {
pub ids: String,
}
#[derive(Deserialize)]
pub struct UserSearchQuery {
pub query: String,
}
pub async fn users_search(
web::Query(query): web::Query<UserSearchQuery>,
pool: web::Data<PgPool>,
) -> Result<web::Json<Vec<crate::models::users::SearchUser>>, ApiError> {
let query = query.query.trim();
let users = DBUser::search(query, &**pool)
.await
.wrap_internal_err("failed to search users")?
.into_iter()
.map(Into::into)
.collect();
Ok(web::Json(users))
}
pub async fn users_get(
req: HttpRequest,
web::Query(ids): web::Query<UserIds>,