Wrapped ApiError to have an simple "error" json object.
This commit is contained in:
parent
44b39a348f
commit
b847228f82
|
@ -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");
|
||||
},
|
||||
|
|
|
@ -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<Settings>,
|
||||
) -> Result<(), Json<ApiError>> {
|
||||
) -> Result<(), Json<ApiErrorWrapper>> {
|
||||
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<Settings>,
|
||||
) -> Result<(), Json<ApiError>> {
|
||||
) -> Result<(), Json<ApiErrorWrapper>> {
|
||||
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<Settings>,
|
||||
) -> Result<(), Json<ApiError>> {
|
||||
) -> Result<(), Json<ApiErrorWrapper>> {
|
||||
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(),
|
||||
)),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<uuid::Uuid, Json<ApiError>> {
|
||||
pub fn parse_qualification_id(
|
||||
qualification_id: String,
|
||||
) -> Result<uuid::Uuid, Json<ApiErrorWrapper>> {
|
||||
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<uuid::Uuid, Js
|
|||
"Couldn't parse qualification uuid send via API: {} {}",
|
||||
qualification_id, e
|
||||
);
|
||||
Err(Json(ApiError {
|
||||
code: "400-qualification-uuid-invalid".to_string(),
|
||||
description: "qualification UUID invalid".to_string(),
|
||||
}))
|
||||
Err(Json(
|
||||
ApiError::new(400, "Qualifikations UUID ungültig".to_string()).to_wrapper(),
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn parse_category_id(category_id: String) -> Result<uuid::Uuid, Json<ApiError>> {
|
||||
pub fn parse_category_id(category_id: String) -> Result<uuid::Uuid, Json<ApiErrorWrapper>> {
|
||||
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<uuid::Uuid, Json<ApiErro
|
|||
"Couldn't parse category_id send via API: {} {}",
|
||||
category_id, e
|
||||
);
|
||||
Err(Json(ApiError {
|
||||
code: "400-category_id-invalid".to_string(),
|
||||
description: "category id invalid".to_string(),
|
||||
}))
|
||||
Err(Json(
|
||||
ApiError::new(400, "Kategoreie ID ungültig".to_string()).to_wrapper(),
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
use crate::database::controller::members::get_member_by_uuid;
|
||||
use crate::helper::settings::Settings;
|
||||
use crate::modules::api::model::api_outcome::ApiError;
|
||||
use crate::modules::api::model::api_outcome::{ApiError, ApiErrorWrapper};
|
||||
use crate::modules::member_management::model::member::Member;
|
||||
use rocket::State;
|
||||
use rocket_contrib::json::Json;
|
||||
use std::str::FromStr;
|
||||
|
||||
pub fn parse_member_id(member_id: String) -> Result<uuid::Uuid, Json<ApiError>> {
|
||||
pub fn parse_member_id(member_id: String) -> Result<uuid::Uuid, Json<ApiErrorWrapper>> {
|
||||
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<uuid::Uuid, Json<ApiError>>
|
|||
"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<uuid::Uuid, Json<ApiError>>
|
|||
pub fn get_member_or_error(
|
||||
member_id: uuid::Uuid,
|
||||
settings: &State<Settings>,
|
||||
) -> Result<Member, Json<ApiError>> {
|
||||
) -> Result<Member, Json<ApiErrorWrapper>> {
|
||||
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<Member>) -> Result<Member, Json<ApiError>> {
|
||||
pub fn parse_member_cookie(member: Option<Member>) -> Result<Member, Json<ApiErrorWrapper>> {
|
||||
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(),
|
||||
)),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<Settings>,
|
||||
) -> Result<Json<CommunicationTypeList>, Json<ApiError>> {
|
||||
) -> Result<Json<CommunicationTypeList>, Json<ApiErrorWrapper>> {
|
||||
//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<Settings>,
|
||||
communication_target: Json<CommunicationTarget>,
|
||||
) -> Result<Json<CommunicationTargetId>, Json<ApiError>> {
|
||||
) -> Result<Json<CommunicationTargetId>, Json<ApiErrorWrapper>> {
|
||||
//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<Settings>,
|
||||
target_id: String,
|
||||
) -> Result<(), Json<ApiError>> {
|
||||
) -> Result<(), Json<ApiErrorWrapper>> {
|
||||
//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(),
|
||||
)),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<Settings>,
|
||||
member_id: String,
|
||||
license_name: String,
|
||||
) -> Result<(), Json<ApiError>> {
|
||||
) -> Result<(), Json<ApiErrorWrapper>> {
|
||||
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<Settings>,
|
||||
member_id: String,
|
||||
license_name: String,
|
||||
) -> Result<(), Json<ApiError>> {
|
||||
) -> Result<(), Json<ApiErrorWrapper>> {
|
||||
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<Settings>,
|
||||
member_id: String,
|
||||
license_name: String,
|
||||
) -> Result<(), Json<ApiError>> {
|
||||
) -> Result<(), Json<ApiErrorWrapper>> {
|
||||
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)
|
||||
|
|
|
@ -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<Settings>,
|
||||
member_id: String,
|
||||
) -> Result<Json<QualificationList>, Json<ApiError>> {
|
||||
) -> Result<Json<QualificationList>, Json<ApiErrorWrapper>> {
|
||||
//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<Settings>,
|
||||
category_id: String,
|
||||
) -> Result<Json<Vec<Qualification>>, Json<ApiError>> {
|
||||
) -> Result<Json<Vec<Qualification>>, Json<ApiErrorWrapper>> {
|
||||
//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<Settings>,
|
||||
member_id: String,
|
||||
qualification_id: String,
|
||||
) -> Result<(), Json<ApiError>> {
|
||||
) -> Result<(), Json<ApiErrorWrapper>> {
|
||||
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<Settings>,
|
||||
member_id: String,
|
||||
qualification_id: String,
|
||||
) -> Result<(), Json<ApiError>> {
|
||||
) -> Result<(), Json<ApiErrorWrapper>> {
|
||||
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(),
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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 }
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue