Refactoring

This commit is contained in:
Keanu D?lle 2020-09-17 22:50:54 +02:00
parent 9cba9d3ce7
commit 4c65ed47e4
9 changed files with 162 additions and 155 deletions

View File

@ -9,6 +9,7 @@ $( document ).ready(function() {
$(".qualification_delete").on("click", QualificationList.delete_qualification); $(".qualification_delete").on("click", QualificationList.delete_qualification);
$( "#add_qualification_category" ).change(QualificationList.get_qualification_for_category); $( "#add_qualification_category" ).change(QualificationList.get_qualification_for_category);
$("#add_qualification_submit").on("click", QualificationList.add_qualification); $("#add_qualification_submit").on("click", QualificationList.add_qualification);
$(".drive_permission_update").on("click", DrivingPermissionModule.update);
}); });
QualificationList = ( function() { QualificationList = ( function() {
@ -97,3 +98,53 @@ QualificationList = ( function() {
add_qualification: add_qualification add_qualification: add_qualification
}; };
})(); })();
DrivingPermissionModule = ( function() {
var update = function(){
var permission_name = $(this).data("permission-name");
var permission_level = $(this).data("permission-level");
if(permission_name === undefined || permission_level === undefined){
return;
}
switch(permission_level){
case "none":
update_to_license(permission_name);
break;
case "license":
update_to_drive_permission(permission_name);
break;
case "drive_permission":
update_to_none(permission_name);
break;
}
};
var update_to_license = function(permission_name){
if(permission_name === undefined){
return;
}
$.ajax({
url: '/api/member_management/add_driving_license?member_id='+member_id+'&license_name='+permission_name,
type: 'PUT',
contentType: 'application/json',
success: function(data) {
$(this).hide();
}
});
};
var update_to_drive_permission = function(permission_name){
if(permission_name === undefined){
return;
}
};
var update_to_none = function(permission_name){
if(permission_name === undefined){
return;
}
}
return{
update: update,
};
}
)();

View File

@ -218,7 +218,7 @@
<div class="card-header">Fahrberechtigungen & Führerscheine</div> <div class="card-header">Fahrberechtigungen & Führerscheine</div>
<div class="card-body"> <div class="card-body">
{{#each licenses}} {{#each licenses}}
<button type="button" class="btn {{#if drive_permission}}btn-success{{else}}{{#if license}}btn-warning{{/if}}{{/if}}" data-toggle="tooltip" data-placement="bottom" title="{{category_description}}">{{category_name}}</button> <button type="button" data-permission-name="{{category_name}}" data-permission-level="{{#if drive_permission}}drive_permission{{else}}{{#if license}}license{{else}}none{{/if}}{{/if}}" class="btn {{#if drive_permission}}btn-success{{else}}{{#if license}}btn-warning{{/if}}{{/if}} drive_permission_update" data-toggle="tooltip" data-placement="bottom" title="{{category_description}}">{{category_name}}</button>
{{/each}} {{/each}}
<hr> <hr>

View File

@ -1 +1,35 @@
use crate::modules::api::model::ApiError::ApiError;
use rocket_contrib::json::Json;
use std::str::FromStr;
pub fn parse_qualification_id(qualification_id: String) -> Result<uuid::Uuid, Json<ApiError>> {
match uuid::Uuid::from_str(&qualification_id) {
Ok(id) => Ok(id),
Err(e) => {
warn!(
"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(),
}))
}
}
}
pub fn parse_category_id(category_id: String) -> Result<uuid::Uuid, Json<ApiError>> {
match uuid::Uuid::from_str(&category_id) {
Ok(id) => Ok(id),
Err(e) => {
warn!(
"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(),
}))
}
}
}

View File

@ -1 +1,3 @@
pub mod member_driving_permissions;
pub mod member_qualifications; pub mod member_qualifications;
pub mod parser;

View File

@ -0,0 +1,31 @@
use crate::modules::api::model::ApiError::ApiError;
use crate::modules::member_management::model::member::Member;
use rocket_contrib::json::Json;
use std::str::FromStr;
pub fn parse_member_id(member_id: String) -> Result<uuid::Uuid, Json<ApiError>> {
match uuid::Uuid::from_str(&member_id) {
Ok(id) => Ok(id),
Err(e) => {
warn!(
"Couldn't parse member uuid send via API: {} {}",
member_id, e
);
Err(Json(ApiError {
code: "400-member-uuid-invalid".to_string(),
description: "Member UUID invalid".to_string(),
}))
}
}
}
pub fn parse_member_cookie(member: Option<Member>) -> Result<Member, Json<ApiError>> {
match member {
//Unwraps member from cookie or send user to login if no member specified (user skipped member selection)
Some(member) => Ok(member),
None => Err(Json(ApiError {
code: "403-member-selection-skipped".to_string(),
description: "Member Selection skipped".to_string(),
})),
}
}

View File

@ -0,0 +1,24 @@
use crate::helper::session_cookies::model::SessionCookie;
use crate::helper::settings::Settings;
use crate::modules::api::member_management::controller::parser::{
parse_member_cookie, parse_member_id,
};
use crate::modules::api::model::ApiError::ApiError;
use rocket::State;
use rocket_contrib::json::Json;
use std::str::FromStr;
#[put(
"/api/member_management/add_driving_license?<member_id>&<license_name>",
format = "json"
)]
pub fn api_member_add_qualification(
cookie: SessionCookie,
settings: State<Settings>,
member_id: String,
license_name: String,
) -> Result<(), Json<ApiError>> {
let member = parse_member_cookie(cookie.member)?;
let member_id = parse_member_id(member_id)?;
Ok(())
}

View File

@ -4,6 +4,12 @@ use crate::database::controller::member_qualifications::{
}; };
use crate::helper::session_cookies::model::SessionCookie; use crate::helper::session_cookies::model::SessionCookie;
use crate::helper::settings::Settings; use crate::helper::settings::Settings;
use crate::modules::api::member_management::controller::member_qualifications::{
parse_category_id, parse_qualification_id,
};
use crate::modules::api::member_management::controller::parser::{
parse_member_cookie, parse_member_id,
};
use crate::modules::api::model::ApiError::ApiError; use crate::modules::api::model::ApiError::ApiError;
use crate::modules::member_management::model::qualifications::{ use crate::modules::member_management::model::qualifications::{
Qualification, QualificationCategory, QualificationList, Qualification, QualificationCategory, QualificationList,
@ -24,31 +30,10 @@ pub fn api_member_get_qualifications(
member_id: String, member_id: String,
) -> Result<Json<QualificationList>, Json<ApiError>> { ) -> Result<Json<QualificationList>, Json<ApiError>> {
//TODO: Check permissions! //TODO: Check permissions!
let member = match cookie.member { let member = parse_member_cookie(cookie.member)?;
//Unwraps member from cookie or send user to login if no member specified (user skipped member selection) let member_id = parse_member_id(member_id)?;
Some(member) => member,
None => {
return Err(Json(ApiError {
code: "403".to_string(),
description: "Member Selection skipped".to_string(),
}))
}
};
let member_id = match uuid::Uuid::from_str(&member_id) {
Ok(id) => id,
Err(e) => {
warn!(
"Couldn't parse member uuid send via API: {} {}",
member_id, e
);
return Err(Json(ApiError {
code: "400-member-uuid-invalid".to_string(),
description: "Member UUID invalid".to_string(),
}));
}
};
//TODO: Proper error handling/display
let categories = get_qualifcation_categories(&settings, member_id); let categories = get_qualifcation_categories(&settings, member_id);
Ok(Json(QualificationList { categories })) Ok(Json(QualificationList { categories }))
} }
@ -63,31 +48,10 @@ pub fn api_member_get_qualifications_for_category(
category_id: String, category_id: String,
) -> Result<Json<Vec<Qualification>>, Json<ApiError>> { ) -> Result<Json<Vec<Qualification>>, Json<ApiError>> {
//TODO: Check permissions! //TODO: Check permissions!
let member = match cookie.member { let member = parse_member_cookie(cookie.member)?;
//Unwraps member from cookie or send user to login if no member specified (user skipped member selection) let category_id = parse_category_id(category_id)?;
Some(member) => member,
None => {
return Err(Json(ApiError {
code: "403".to_string(),
description: "Member Selection skipped".to_string(),
}))
}
};
let category_id = match uuid::Uuid::from_str(&category_id) {
Ok(id) => id,
Err(e) => {
warn!(
"Couldn't parse category_id send via API: {} {}",
category_id, e
);
return Err(Json(ApiError {
code: "400-category_id-invalid".to_string(),
description: "category id invalid".to_string(),
}));
}
};
//TODO: Proper error handling/display
let categories = get_qualifications_for_category(&settings, category_id); let categories = get_qualifications_for_category(&settings, category_id);
Ok(Json(categories)) Ok(Json(categories))
} }
@ -102,44 +66,9 @@ pub fn api_member_remove_qualification(
member_id: String, member_id: String,
qualification_id: String, qualification_id: String,
) -> Result<(), Json<ApiError>> { ) -> Result<(), Json<ApiError>> {
let member = match cookie.member { let member = parse_member_cookie(cookie.member)?;
//Unwraps member from cookie or send user to login if no member specified (user skipped member selection) let member_id = parse_member_id(member_id)?;
Some(member) => member, let qualification_id = parse_qualification_id(qualification_id)?;
None => {
return Err(Json(ApiError {
code: "403-member-selection-skipped".to_string(),
description: "Member Selection skipped".to_string(),
}))
}
};
let member_id = match uuid::Uuid::from_str(&member_id) {
Ok(id) => id,
Err(e) => {
warn!(
"Couldn't parse member uuid send via API: {} {}",
member_id, e
);
return Err(Json(ApiError {
code: "400-member-uuid-invalid".to_string(),
description: "Member UUID invalid".to_string(),
}));
}
};
let qualification_id = match uuid::Uuid::from_str(&qualification_id) {
Ok(id) => id,
Err(e) => {
warn!(
"Couldn't parse qualification uuid send via API: {} {}",
qualification_id, e
);
return Err(Json(ApiError {
code: "400-qualification-uuid-invalid".to_string(),
description: "qualification UUID invalid".to_string(),
}));
}
};
match remove_qualification_for_member(&settings, member_id, qualification_id) { match remove_qualification_for_member(&settings, member_id, qualification_id) {
Ok(_) => Ok(()), Ok(_) => Ok(()),
@ -164,44 +93,9 @@ pub fn api_member_add_qualification(
member_id: String, member_id: String,
qualification_id: String, qualification_id: String,
) -> Result<(), Json<ApiError>> { ) -> Result<(), Json<ApiError>> {
let member = match cookie.member { let member = parse_member_cookie(cookie.member)?;
//Unwraps member from cookie or send user to login if no member specified (user skipped member selection) let member_id = parse_member_id(member_id)?;
Some(member) => member, let qualification_id = parse_qualification_id(qualification_id)?;
None => {
return Err(Json(ApiError {
code: "403-member-selection-skipped".to_string(),
description: "Member Selection skipped".to_string(),
}))
}
};
let member_id = match uuid::Uuid::from_str(&member_id) {
Ok(id) => id,
Err(e) => {
warn!(
"Couldn't parse member uuid send via API: {} {}",
member_id, e
);
return Err(Json(ApiError {
code: "400-member-uuid-invalid".to_string(),
description: "Member UUID invalid".to_string(),
}));
}
};
let qualification_id = match uuid::Uuid::from_str(&qualification_id) {
Ok(id) => id,
Err(e) => {
warn!(
"Couldn't parse qualification uuid send via API: {} {}",
qualification_id, e
);
return Err(Json(ApiError {
code: "400-qualification-uuid-invalid".to_string(),
description: "qualification UUID invalid".to_string(),
}));
}
};
match add_qualification_for_member(&settings, member_id, qualification_id) { match add_qualification_for_member(&settings, member_id, qualification_id) {
Ok(_) => Ok(()), Ok(_) => Ok(()),
@ -215,33 +109,3 @@ pub fn api_member_add_qualification(
//TODO: check permissions //TODO: check permissions
} }
#[cfg(test)]
mod tests {
use super::*;
use crate::modules::member_management::model::qualifications::{
Qualification, QualificationCategory,
};
#[test]
pub fn test_qualifiction() {
let list = QualificationList {
categories: vec![QualificationCategory {
id: Default::default(),
name: "Test".to_string(),
description: None,
qualifications: vec![Qualification {
id: Default::default(),
name: "Test2".to_string(),
description: None,
}],
visible: false,
}],
};
let j = serde_json::to_string(&list);
print!("{}", j.unwrap());
assert_eq!("test", "test");
}
}

View File

@ -1 +1,2 @@
pub mod member_driving_permissions;
pub mod member_qualifications; pub mod member_qualifications;