use actix_web::{HttpResponse, Responder, Result, post, web}; use serde::Deserialize; use utoipa::ToSchema; use crate::{ app::App, storage::sql::{ insert::Operations, unit::{Unit, UnitId}, unit_property::UnitPropertyId, }, }; #[derive(Deserialize, ToSchema)] struct UnitStub { full_name_plural: String, full_name_singular: String, short_name: String, unit_property: UnitPropertyId, description: Option, } /// Register an Unit #[utoipa::path( responses( ( status = 200, description = "Unit successfully registered in database", body = UnitId, ), ( status = INTERNAL_SERVER_ERROR, description = "Server encountered error", body = String, ) ), request_body = UnitStub, )] #[post("/unit/new")] pub(crate) async fn register_unit( app: web::Data, unit: web::Json, ) -> Result { let mut ops = Operations::new("register unit"); let unit = Unit::register( unit.full_name_singular.clone(), unit.full_name_plural.clone(), unit.short_name.clone(), unit.description.clone(), unit.unit_property, &mut ops, ); ops.apply(&app).await?; Ok(HttpResponse::Ok().json(unit.id)) }