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

50 lines
2.0 KiB
Rust

use crate::helper::session_cookies::model::SessionCookie;
use rocket::State;
use crate::helper::settings::Settings;
use rocket::serde::json::Json;
use crate::modules::member_management::model::qualifications::{QualificationList, QualificationCategory};
use crate::modules::api::model::api_outcome::{ApiErrorWrapper, ApiError};
use crate::modules::api::member_management::controller::parser::{parse_member_cookie, parse_uuid_string};
use crate::helper::check_access::check_access_to_member_and_group;
use crate::database::controller::groups::get_groups_for_member;
use crate::database::controller::member_qualifications::{get_qualifcation_categories, get_qualifications};
use crate::helper::translate_diesel_error::translate_diesel;
#[get(
"/api/members/<member_id>/qualifications",
format = "json"
)]
pub fn api_member_qualifications_read(
cookie: SessionCookie,
settings: &State<Settings>,
member_id: String,
) -> Result<Json<QualificationList>, Json<ApiErrorWrapper>> {
let caller = parse_member_cookie(cookie.member)?;
let member_id = parse_uuid_string(member_id)?;
let groups = get_groups_for_member(settings, member_id);
if !check_access_to_member_and_group(settings, member_id, groups, caller.entity_id, crate::permissions::modules::member_management::profile::qualifications::VIEW.to_string()){
return Err(Json(ApiError::new(401, "Keine Berechtigung Qualifikationen für dieses Mitglied abzurufen!".to_string()).to_wrapper()))
}
//TODO: Proper error handling/display
let categories = get_qualifcation_categories(settings, member_id);
Ok(Json(QualificationList { categories }))
}
#[get(
"/api/members/qualifications",
format = "json"
)]
pub fn read_qualifications(
cookie: SessionCookie,
settings: &State<Settings>,
) -> Result<Json<Vec<QualificationCategory>>, Json<ApiErrorWrapper>> {
let _caller = parse_member_cookie(cookie.member)?;
match get_qualifications(settings){
Ok(qual) => Ok(Json(qual)),
Err(e) => Err(translate_diesel(e))
}
}