backend/controller/
users.rs

1//! `Users` endpoints.
2
3use actix_web::{get, web::Query, HttpResponse, Result};
4
5use crate::{
6    config::{
7        auth::user_info::UserInfo,
8        data::{SharedHttpClient, SharedKeycloakApi},
9    },
10    model::dto::{PageParameters, UserSearchParameters},
11    service,
12};
13
14/// Endpoint for searching users.
15///
16/// # Errors
17/// * If the connection to the keycloak API could not be established.
18#[utoipa::path(
19    context_path = "/api/users",
20    params(
21        UserSearchParameters,
22    ),
23    responses(
24        (status = 200, description = "Users matching the username search", body = Vec<UserDto>)
25    ),
26    security(
27        ("oauth2" = [])
28    )
29)]
30#[get("")]
31pub async fn find(
32    search_query: Query<UserSearchParameters>,
33    pagination_query: Query<PageParameters>,
34    user_info: UserInfo,
35    keycloak_api: SharedKeycloakApi,
36    http_client: SharedHttpClient,
37) -> Result<HttpResponse> {
38    let response = service::users::search_by_username(
39        &search_query,
40        &pagination_query,
41        user_info.id,
42        &keycloak_api,
43        &http_client,
44    )
45    .await?;
46    Ok(HttpResponse::Ok().json(response))
47}