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

60 lines
2.0 KiB
Rust

use crate::database::controller::api_members::delete_entity_deprecated;
use crate::database::controller::groups::get_groups_for_member;
use crate::helper::check_access::check_access_to_member_and_group;
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;
#[delete("/api/members/<entity_id>", format = "json")]
pub fn api_members_delete(
cookie: SessionCookie,
settings: &State<Settings>,
entity_id: String,
) -> Result<(), Json<ApiErrorWrapper>> {
let caller = parse_member_cookie(cookie.member)?;
let member_id = parse_uuid_string(entity_id)?;
let groups = get_groups_for_member(settings, member_id);
if !check_access_to_member_and_group(
&settings,
member_id,
groups,
caller.entity_id,
"modules.member_management.profile.delete".to_string(),
) {
return Err(Json(
ApiError::new(403, "Keine Berechtigung Mitglied zu löschen!".to_string()).to_wrapper(),
));
}
match delete_entity_deprecated(settings, member_id) {
Ok(result) => {
if result == 1 {
Ok(())
} else {
Err(Json(
ApiError::new(500, "Es ist ein Datenbankfehler aufgetreten!".to_string())
.to_wrapper(),
))
}
}
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(),
)),
},
}
}