99 lines
4.5 KiB
Rust
99 lines
4.5 KiB
Rust
use rocket::State;
|
|
use crate::helper::settings::Settings;
|
|
use crate::helper::session_cookies::model::SessionCookie;
|
|
use rocket::serde::json::Json;
|
|
|
|
use crate::database::model::vehicles::Vehicle;
|
|
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::database::controller::entities::generate_entity;
|
|
use crate::database::controller::vehicles::add_vehicle;
|
|
use crate::helper::translate_diesel_error::translate_diesel;
|
|
use crate::database::controller::roles::{add_permission_context, get_role_permission_id};
|
|
|
|
|
|
#[derive(Queryable, Clone, Deserialize, Serialize)]
|
|
pub struct CreateVehicleData{
|
|
pub(crate) identifier: String,
|
|
pub(crate) numberplate: Option<String>,
|
|
pub(crate) description: Option<String>,
|
|
pub(crate) is_operational: bool,
|
|
pub(crate) admissible_total_weight: Option<i32>,
|
|
pub(crate) vehicle_category: Option<String>,
|
|
pub(crate) required_license: Option<String>,
|
|
}
|
|
|
|
#[post("/api/resources/vehicles", format = "json", data = "<create_vehicle_data>")]
|
|
pub fn create_vehicle(
|
|
settings: &State<Settings>,
|
|
cookie: SessionCookie,
|
|
create_vehicle_data: Json<CreateVehicleData>,
|
|
) -> Result<Json<Vehicle>, Json<ApiErrorWrapper>> {
|
|
let caller = parse_member_cookie(cookie.member)?;
|
|
if !caller.has_permission("modules.resource_management.vehicles.core.create".to_string()) {
|
|
return Err(Json(
|
|
ApiError::new(403, "Keine Berechtigung, Fahrzeug anzulegen!".to_string()).to_wrapper(),
|
|
));
|
|
}
|
|
|
|
let vehicle_create_data = create_vehicle_data.into_inner();
|
|
|
|
let entity_id2 = match generate_entity(settings){
|
|
Ok(ent) => ent,
|
|
Err(_e) => return Err(Json(ApiError::new(500, "Konnte keine neue Entität anlegen!".to_string()).to_wrapper()))
|
|
};
|
|
|
|
let vehicle_category = match vehicle_create_data.vehicle_category{
|
|
Some(category) => Some(parse_uuid_string(category)?),
|
|
None => None,
|
|
};
|
|
|
|
let vehicle = Vehicle{
|
|
entity_id: entity_id2,
|
|
identifier: vehicle_create_data.identifier,
|
|
numberplate: vehicle_create_data.numberplate,
|
|
description: vehicle_create_data.description,
|
|
is_operational: vehicle_create_data.is_operational,
|
|
admissible_total_weight: vehicle_create_data.admissible_total_weight,
|
|
required_license: vehicle_create_data.required_license,
|
|
vehicle_category,
|
|
};
|
|
|
|
match add_vehicle(settings, vehicle){
|
|
Ok(vehicle) => {
|
|
let rpi = match get_role_permission_id(settings, "admin".to_string(), crate::permissions::modules::resource_management::vehicles::core::EDIT){
|
|
Some(rpi) => rpi,
|
|
None => return Err(Json(ApiError::new(500, "Couldn't add permission".to_string()).to_wrapper()))
|
|
};
|
|
let rpi2 = match get_role_permission_id(settings, "admin".to_string(), crate::permissions::modules::scheduler::appointments::VIEW){
|
|
Some(rpi) => rpi,
|
|
None => return Err(Json(ApiError::new(500, "Couldn't add permission".to_string()).to_wrapper()))
|
|
};
|
|
let rpi3 = match get_role_permission_id(settings, "admin".to_string(), crate::permissions::modules::scheduler::appointments::EDIT){
|
|
Some(rpi) => rpi,
|
|
None => return Err(Json(ApiError::new(500, "Couldn't add permission".to_string()).to_wrapper()))
|
|
};
|
|
let rpi4 = match get_role_permission_id(settings, "admin".to_string(), crate::permissions::modules::resource_management::vehicles::core::DELETE){
|
|
Some(rpi) => rpi,
|
|
None => return Err(Json(ApiError::new(500, "Couldn't add permission".to_string()).to_wrapper()))
|
|
};
|
|
match add_permission_context(settings, rpi, vehicle.entity_id){
|
|
Ok(_) => {},
|
|
Err(e) => return Err(translate_diesel(e))
|
|
};
|
|
match add_permission_context(settings, rpi3, vehicle.entity_id){
|
|
Ok(_) => {},
|
|
Err(e) => return Err(translate_diesel(e))
|
|
};
|
|
match add_permission_context(settings, rpi2, vehicle.entity_id){
|
|
Ok(_) => {},
|
|
Err(e) => return Err(translate_diesel(e))
|
|
};
|
|
match add_permission_context(settings, rpi4, vehicle.entity_id){
|
|
Ok(_) => Ok(Json(vehicle)),
|
|
Err(e) => Err(translate_diesel(e))
|
|
}
|
|
},
|
|
Err(e) => Err(translate_diesel(e)),
|
|
}
|
|
} |