EinsatzOnline/src/modules/api/member_management/controller/parser.rs

53 lines
1.8 KiB
Rust

use crate::database::controller::members::get_member_by_uuid;
use crate::helper::settings::Settings;
use crate::modules::api::model::api_outcome::{ApiError, ApiErrorWrapper};
use crate::modules::member_management::model::member::Member;
use rocket::State;
use rocket::serde::json::Json;
use std::str::FromStr;
pub fn parse_uuid_string(entity_id: String) -> Result<uuid::Uuid, Json<ApiErrorWrapper>> {
parse_uuid(&entity_id)
}
pub fn parse_uuid(entity_id: &str) -> Result<uuid::Uuid, Json<ApiErrorWrapper>> {
match uuid::Uuid::from_str(entity_id) {
Ok(id) => Ok(id),
Err(e) => {
warn!("Couldn't parse uuid send via API: {} {}", entity_id, e);
Err(Json(
ApiError::new(400, "UUID der Resource ist ungültig!".to_string()).to_wrapper(),
))
}
}
}
pub fn parse_option_uuid(entity_id: Option<String>) -> Result<Option<uuid::Uuid>, Json<ApiErrorWrapper>> {
match entity_id{
Some(entity_id) => Ok(Some(parse_uuid_string(entity_id)?)),
None => Ok(None)
}
}
pub fn get_member_or_error(
member_id: uuid::Uuid,
settings: &State<Settings>,
) -> Result<Member, Json<ApiErrorWrapper>> {
match get_member_by_uuid(member_id, &settings) {
Some(member) => Ok(member),
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<ApiErrorWrapper>> {
match member {
Some(member) => Ok(member),
None => Err(Json(
ApiError::new(403, "Kein Mitglied für Account ausgewählt!".to_string()).to_wrapper(),
)),
}
}