diff --git a/resources/js/member_management_profile.js b/resources/js/member_management_profile.js index a665662..ea51fe2 100644 --- a/resources/js/member_management_profile.js +++ b/resources/js/member_management_profile.js @@ -142,6 +142,7 @@ DrivingPermissionModule = ( function() { contentType: 'application/json', success: function(data) { console.log(data); + if('') $(element).removeClass("btn-success").addClass("btn-warning"); $(element).data("permission-level", "license"); }, diff --git a/src/modules/api/member_management/controller/member_driving_permissions.rs b/src/modules/api/member_management/controller/member_driving_permissions.rs index d2f82a9..99ddbab 100644 --- a/src/modules/api/member_management/controller/member_driving_permissions.rs +++ b/src/modules/api/member_management/controller/member_driving_permissions.rs @@ -2,7 +2,7 @@ use crate::database::controller::member_licenses::{ add_member_driving_permission, add_member_license, remove_member_license, }; use crate::helper::settings::Settings; -use crate::modules::api::model::api_outcome::ApiError; +use crate::modules::api::model::api_outcome::{ApiError, ApiErrorWrapper}; use diesel::result::Error; use rocket::State; use rocket_contrib::json::Json; @@ -11,22 +11,20 @@ pub fn add_member_license_or_error( member_id: uuid::Uuid, license_name: String, settings: &State, -) -> Result<(), Json> { +) -> Result<(), Json> { match add_member_license(settings, member_id, license_name) { Ok(num) => { if num != 1 { - Err(Json(ApiError { - code: "500-invalid-database-operations".to_string(), - description: format!("Performed {} database operations. Should be one.", num), - })) + Err(Json( + ApiError::new(500, "Datenbankfehler aufgetreten.".to_string()).to_wrapper(), + )) } else { Ok(()) } } - Err(_) => Err(Json(ApiError { - code: "500-database-error".to_string(), - description: format!("Database Error occurred."), - })), + Err(_) => Err(Json( + ApiError::new(400, "Datenbankfehler aufgetreten.".to_string()).to_wrapper(), + )), } } @@ -34,22 +32,22 @@ pub fn add_member_driving_permission_or_error( member_id: uuid::Uuid, license_name: String, settings: &State, -) -> Result<(), Json> { +) -> Result<(), Json> { match add_member_driving_permission(settings, member_id, license_name) { Ok(num) => { if num != 1 { - Err(Json(ApiError { - code: "500-invalid-database-operations".to_string(), - description: format!("Performed {} database operations. Should be one.", num), - })) + Err(Json( + ApiError::new(500, "Datenbankfehler aufgetreten".to_string()).to_wrapper(), + )) } else { Ok(()) } } - Err(_) => Err(Json(ApiError { - code: "500-database-error".to_string(), - description: format!("Database Error occurred."), - })), + Err(_) => { + (Err(Json( + ApiError::new(500, "Datenbankfehler aufgetreten".to_string()).to_wrapper(), + ))) + } } } @@ -57,21 +55,19 @@ pub fn remove_member_license_or_error( member_id: uuid::Uuid, license_name: String, settings: &State, -) -> Result<(), Json> { +) -> Result<(), Json> { match remove_member_license(settings, member_id, license_name) { Ok(num) => { if num != 1 { - Err(Json(ApiError { - code: "500-invalid-database-operations".to_string(), - description: format!("Performed {} database operations. Should be one.", num), - })) + Err(Json( + ApiError::new(500, "Datenbankfehler aufgetreten.".to_string()).to_wrapper(), + )) } else { Ok(()) } } - Err(_) => Err(Json(ApiError { - code: "500-database-error".to_string(), - description: format!("Database Error occurred."), - })), + Err(_) => Err(Json( + ApiError::new(500, "Datenbankfehler aufgetreten.".to_string()).to_wrapper(), + )), } } diff --git a/src/modules/api/member_management/controller/member_qualifications.rs b/src/modules/api/member_management/controller/member_qualifications.rs index 3924213..66ee92f 100644 --- a/src/modules/api/member_management/controller/member_qualifications.rs +++ b/src/modules/api/member_management/controller/member_qualifications.rs @@ -1,8 +1,10 @@ -use crate::modules::api::model::api_outcome::ApiError; +use crate::modules::api::model::api_outcome::{ApiError, ApiErrorWrapper}; use rocket_contrib::json::Json; use std::str::FromStr; -pub fn parse_qualification_id(qualification_id: String) -> Result> { +pub fn parse_qualification_id( + qualification_id: String, +) -> Result> { match uuid::Uuid::from_str(&qualification_id) { Ok(id) => Ok(id), Err(e) => { @@ -10,15 +12,14 @@ pub fn parse_qualification_id(qualification_id: String) -> Result Result> { +pub fn parse_category_id(category_id: String) -> Result> { match uuid::Uuid::from_str(&category_id) { Ok(id) => Ok(id), Err(e) => { @@ -26,10 +27,9 @@ pub fn parse_category_id(category_id: String) -> Result Result> { +pub fn parse_member_id(member_id: String) -> Result> { match uuid::Uuid::from_str(&member_id) { Ok(id) => Ok(id), Err(e) => { @@ -14,10 +14,9 @@ pub fn parse_member_id(member_id: String) -> Result> "Couldn't parse member uuid send via API: {} {}", member_id, e ); - Err(Json(ApiError { - code: "400".to_string(), - description: "Mitglied UUID ungültig.".to_string(), - })) + Err(Json( + ApiError::new(400, "UUID des Mitglieds ist ungültig!".to_string()).to_wrapper(), + )) } } } @@ -25,23 +24,21 @@ pub fn parse_member_id(member_id: String) -> Result> pub fn get_member_or_error( member_id: uuid::Uuid, settings: &State, -) -> Result> { +) -> Result> { match get_member_by_uuid(member_id, &settings) { Some(member) => Ok(member), - None => Err(Json(ApiError { - code: "500".to_string(), - description: "Konnte Mitglied nicht laden.".to_string(), - })), + None => Err(Json( + ApiError::new(500, "Konnte Mitglied nicht laden!".to_string()).to_wrapper(), + )), } } //Unwraps member from cookie or send user to login if no member specified (user skipped member selection) -pub fn parse_member_cookie(member: Option) -> Result> { +pub fn parse_member_cookie(member: Option) -> Result> { match member { Some(member) => Ok(member), - None => Err(Json(ApiError { - code: "403".to_string(), - description: "Mitgliederauswahl übersprungen".to_string(), - })), + None => Err(Json( + ApiError::new(403, "Kein Mitglied für Account ausgewählt!".to_string()).to_wrapper(), + )), } } diff --git a/src/modules/api/member_management/view/member_communication.rs b/src/modules/api/member_management/view/member_communication.rs index 608f848..0c242bb 100644 --- a/src/modules/api/member_management/view/member_communication.rs +++ b/src/modules/api/member_management/view/member_communication.rs @@ -10,7 +10,7 @@ use crate::modules::api::member_management::controller::parser::{ use crate::modules::api::member_management::model::member_communication::{ CommunicationTargetId, CommunicationTypeList, }; -use crate::modules::api::model::api_outcome::ApiError; +use crate::modules::api::model::api_outcome::{ApiError, ApiErrorWrapper}; use diesel::result::Error; use rocket::State; use rocket_contrib::json::Json; @@ -19,7 +19,7 @@ use rocket_contrib::json::Json; pub fn api_member_get_communication_types( cookie: SessionCookie, settings: State, -) -> Result, Json> { +) -> Result, Json> { //TODO: Check permissions! let member = parse_member_cookie(cookie.member)?; @@ -37,16 +37,15 @@ pub fn api_member_add_communication_target( cookie: SessionCookie, settings: State, communication_target: Json, -) -> Result, Json> { +) -> Result, Json> { //TODO: Check permissions! let member = parse_member_cookie(cookie.member)?; match add_communication_target(&settings, communication_target.into_inner()) { Ok(target_id) => Ok(Json(CommunicationTargetId { target_id })), - Err(_) => Err(Json(ApiError { - code: "500".to_string(), - description: format!("Database error occured."), - })), + Err(_) => Err(Json( + ApiError::new(500, "Datenbankfehler aufgetreten".to_string()).to_wrapper(), + )), } } @@ -58,16 +57,15 @@ pub fn api_member_remove_communication_target( cookie: SessionCookie, settings: State, target_id: String, -) -> Result<(), Json> { +) -> Result<(), Json> { //TODO: Check permissions! let member = parse_member_cookie(cookie.member)?; let target_id = parse_member_id(target_id)?; match remove_communication_target(&settings, target_id) { Ok(_) => Ok(()), - Err(_) => Err(Json(ApiError { - code: "500".to_string(), - description: "Database error occured".to_string(), - })), + Err(_) => Err(Json( + ApiError::new(500, "Datenbankfehler aufgetreten".to_string()).to_wrapper(), + )), } } diff --git a/src/modules/api/member_management/view/member_driving_permissions.rs b/src/modules/api/member_management/view/member_driving_permissions.rs index 0bcf676..74d873b 100644 --- a/src/modules/api/member_management/view/member_driving_permissions.rs +++ b/src/modules/api/member_management/view/member_driving_permissions.rs @@ -9,7 +9,7 @@ use crate::modules::api::member_management::controller::member_driving_permissio use crate::modules::api::member_management::controller::parser::{ get_member_or_error, parse_member_cookie, parse_member_id, }; -use crate::modules::api::model::api_outcome::ApiError; +use crate::modules::api::model::api_outcome::{ApiError, ApiErrorWrapper}; use rocket::State; use rocket_contrib::json::Json; use std::str::FromStr; @@ -23,7 +23,7 @@ pub fn api_member_add_driving_license( settings: State, member_id: String, license_name: String, -) -> Result<(), Json> { +) -> Result<(), Json> { let caller = parse_member_cookie(cookie.member)?; let member = get_member_or_error(parse_member_id(member_id)?, &settings)?; @@ -33,10 +33,7 @@ pub fn api_member_add_driving_license( caller.entity_id, "modules.member_management.modules.member_management.profile.drive_permissions_licenses.edit".to_string(), ) { - return Err(Json(ApiError{ - code: "401".to_string(), - description: "Keine Berechtigung, Fahrberechtigungen zu ändern!".to_string() - })); + return Err(Json(ApiError::new(401, "Keine Berechtigung, Fahrberechtigungen zu ändern!".to_string()).to_wrapper())); } add_member_license_or_error(member.entity_id, license_name, &settings) @@ -51,7 +48,7 @@ pub fn api_member_add_driving_permission( settings: State, member_id: String, license_name: String, -) -> Result<(), Json> { +) -> Result<(), Json> { let caller = parse_member_cookie(cookie.member)?; let member = get_member_or_error(parse_member_id(member_id)?, &settings)?; @@ -61,10 +58,7 @@ pub fn api_member_add_driving_permission( caller.entity_id, "modules.member_management.modules.member_management.profile.drive_permissions_licenses.edit".to_string(), ) { - return Err(Json(ApiError{ - code: "401".to_string(), - description: "Keine Berechtigung, Fahrberechtigungen zu ändern!".to_string() - })); + return Err(Json(ApiError::new(401, "Keine Berechtigung, Fahrberechtigungen zu ändern!".to_string()).to_wrapper())); } add_member_driving_permission_or_error(member.entity_id, license_name, &settings) @@ -79,7 +73,7 @@ pub fn api_member_remove_driving_license( settings: State, member_id: String, license_name: String, -) -> Result<(), Json> { +) -> Result<(), Json> { let caller = parse_member_cookie(cookie.member)?; let member = get_member_or_error(parse_member_id(member_id)?, &settings)?; @@ -89,10 +83,7 @@ pub fn api_member_remove_driving_license( caller.entity_id, "modules.member_management.modules.member_management.profile.drive_permissions_licenses.edit".to_string(), ) { - return Err(Json(ApiError{ - code: "401".to_string(), - description: "Keine Berechtigung, Fahrberechtigungen zu ändern!".to_string() - })); + return Err(Json(ApiError::new(401, "Keine Berechtigung, Fahrberechtigungen zu ändern!".to_string()).to_wrapper())); } remove_member_license_or_error(member.entity_id, license_name, &settings) diff --git a/src/modules/api/member_management/view/member_qualifications.rs b/src/modules/api/member_management/view/member_qualifications.rs index 9612e5b..dc1a748 100644 --- a/src/modules/api/member_management/view/member_qualifications.rs +++ b/src/modules/api/member_management/view/member_qualifications.rs @@ -10,7 +10,7 @@ use crate::modules::api::member_management::controller::member_qualifications::{ use crate::modules::api::member_management::controller::parser::{ parse_member_cookie, parse_member_id, }; -use crate::modules::api::model::api_outcome::ApiError; +use crate::modules::api::model::api_outcome::{ApiError, ApiErrorWrapper}; use crate::modules::member_management::model::qualifications::{ Qualification, QualificationCategory, QualificationList, }; @@ -28,7 +28,7 @@ pub fn api_member_get_qualifications( cookie: SessionCookie, settings: State, member_id: String, -) -> Result, Json> { +) -> Result, Json> { //TODO: Check permissions! let member = parse_member_cookie(cookie.member)?; let member_id = parse_member_id(member_id)?; @@ -46,7 +46,7 @@ pub fn api_member_get_qualifications_for_category( cookie: SessionCookie, settings: State, category_id: String, -) -> Result>, Json> { +) -> Result>, Json> { //TODO: Check permissions! let member = parse_member_cookie(cookie.member)?; let category_id = parse_category_id(category_id)?; @@ -65,7 +65,7 @@ pub fn api_member_remove_qualification( settings: State, member_id: String, qualification_id: String, -) -> Result<(), Json> { +) -> Result<(), Json> { let member = parse_member_cookie(cookie.member)?; let member_id = parse_member_id(member_id)?; let qualification_id = parse_qualification_id(qualification_id)?; @@ -73,10 +73,9 @@ pub fn api_member_remove_qualification( match remove_qualification_for_member(&settings, member_id, qualification_id) { Ok(_) => Ok(()), Err(e) => { - return Err(Json(ApiError { - code: "500".to_string(), - description: format!("Database error occured: {}", e), - })) + return Err(Json( + ApiError::new(500, "Datenbankfehler aufgetreten".to_string()).to_wrapper(), + )) } } @@ -92,7 +91,7 @@ pub fn api_member_add_qualification( settings: State, member_id: String, qualification_id: String, -) -> Result<(), Json> { +) -> Result<(), Json> { let member = parse_member_cookie(cookie.member)?; let member_id = parse_member_id(member_id)?; let qualification_id = parse_qualification_id(qualification_id)?; @@ -100,10 +99,9 @@ pub fn api_member_add_qualification( match add_qualification_for_member(&settings, member_id, qualification_id) { Ok(_) => Ok(()), Err(e) => { - return Err(Json(ApiError { - code: "500".to_string(), - description: format!("Database error occured: {}", e), - })) + return Err(Json( + ApiError::new(500, "Datenbankfehler aufgetreten".to_string()).to_wrapper(), + )) } } diff --git a/src/modules/api/model/api_outcome.rs b/src/modules/api/model/api_outcome.rs index 4b58a9a..183d7a0 100644 --- a/src/modules/api/model/api_outcome.rs +++ b/src/modules/api/model/api_outcome.rs @@ -1,5 +1,19 @@ #[derive(Serialize, Deserialize, Queryable, Clone, Debug)] pub struct ApiError { - pub(crate) code: String, + pub(crate) code: u16, pub(crate) description: String, } + +#[derive(Serialize, Deserialize, Queryable, Clone, Debug)] +pub struct ApiErrorWrapper { + pub(crate) error: ApiError, +} + +impl ApiError { + pub fn new(code: u16, description: String) -> ApiError { + ApiError { code, description } + } + pub fn to_wrapper(self) -> ApiErrorWrapper { + ApiErrorWrapper { error: self } + } +}