88 lines
3.1 KiB
Rust
88 lines
3.1 KiB
Rust
use crate::database::controller::api_members::{
|
|
get_member_search_result, get_member_search_result_by_name,
|
|
};
|
|
use crate::helper::session_cookies::model::SessionCookie;
|
|
use crate::helper::settings::Settings;
|
|
use crate::modules::api::member_management::controller::parser::{parse_member_cookie, parse_uuid_string};
|
|
use crate::modules::api::model::api_outcome::{ApiError, ApiErrorWrapper};
|
|
use rocket::State;
|
|
use rocket::serde::json::Json;
|
|
|
|
#[derive(Serialize, Deserialize, Queryable, Clone)]
|
|
pub struct MemberSearchResult {
|
|
pub(crate) entity_id: uuid::Uuid,
|
|
pub(crate) firstname: String,
|
|
pub(crate) lastname: String,
|
|
pub(crate) readable: bool,
|
|
}
|
|
|
|
#[derive(Serialize, Deserialize, Queryable, Clone)]
|
|
pub struct MemberSearch {
|
|
pub(crate) members: Vec<MemberSearchResult>,
|
|
}
|
|
|
|
#[get("/api/members/<entity_id>", format = "json", rank = 1)]
|
|
pub fn api_members_get(
|
|
cookie: SessionCookie,
|
|
settings: &State<Settings>,
|
|
entity_id: String,
|
|
) -> Result<Json<MemberSearchResult>, Json<ApiErrorWrapper>> {
|
|
let caller = parse_member_cookie(cookie.member)?;
|
|
if !caller.has_permission("modules.member_management.search".to_string()) {
|
|
return Err(Json(
|
|
ApiError::new(403, "Keine Berechtigung, Mitglieder zu suchen!".to_string())
|
|
.to_wrapper(),
|
|
));
|
|
};
|
|
|
|
let entity_id = parse_uuid_string(entity_id)?;
|
|
match get_member_search_result(settings, entity_id, caller.entity_id) {
|
|
Ok(result) => Ok(Json(result)),
|
|
Err(e) => match e {
|
|
diesel::result::Error::NotFound => Err(Json(
|
|
ApiError::new(
|
|
404,
|
|
"Das angeforderte Mitglied konnte nicht gefunden werden!".to_string(),
|
|
)
|
|
.to_wrapper(),
|
|
)),
|
|
_ => Err(Json(
|
|
ApiError::new(500, "Es ist ein Datenbankfehler aufgetreten!".to_string())
|
|
.to_wrapper(),
|
|
)),
|
|
},
|
|
}
|
|
}
|
|
|
|
#[get("/api/members?<name>", format = "json", rank = 2)]
|
|
pub fn api_members_search_name(
|
|
cookie: SessionCookie,
|
|
settings: &State<Settings>,
|
|
name: String,
|
|
) -> Result<Json<MemberSearch>, Json<ApiErrorWrapper>> {
|
|
let caller = parse_member_cookie(cookie.member)?;
|
|
if !caller.has_permission("modules.member_management.search".to_string()) {
|
|
return Err(Json(
|
|
ApiError::new(403, "Keine Berechtigung, Mitglieder zu suchen!".to_string())
|
|
.to_wrapper(),
|
|
));
|
|
};
|
|
|
|
match get_member_search_result_by_name(settings, name, caller.entity_id) {
|
|
Ok(result) => Ok(Json(MemberSearch { members: result })),
|
|
Err(e) => match e {
|
|
diesel::result::Error::NotFound => Err(Json(
|
|
ApiError::new(
|
|
404,
|
|
"Das angeforderte Mitglied konnte nicht gefunden werden!".to_string(),
|
|
)
|
|
.to_wrapper(),
|
|
)),
|
|
_ => Err(Json(
|
|
ApiError::new(500, "Es ist ein Datenbankfehler aufgetreten!".to_string())
|
|
.to_wrapper(),
|
|
)),
|
|
},
|
|
}
|
|
}
|