EinsatzOnline/src/modules/api/members/get_member.rs

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(),
)),
},
}
}