use actix_identity::Identity; use actix_web::{HttpResponse, Responder, Result, post, web}; use serde::Deserialize; use utoipa::ToSchema; use crate::{ app::App, storage::sql::{ insert::Operations, unit_property::{UnitProperty, UnitPropertyId}, }, }; #[derive(Deserialize, ToSchema)] struct UnitPropertyStub { /// The name of the unit property. name: String, /// An optional description of the unit property. #[schema(nullable = false)] description: Option, } /// Register an Unit Property #[utoipa::path( responses( ( status = OK, description = "Unit property successfully registered in database", body = UnitPropertyId, ), ( status = UNAUTHORIZED, description = "You did not login before calling this endpoint", ), ( status = INTERNAL_SERVER_ERROR, description = "Server encountered error", body = String, ) ), request_body = UnitPropertyStub, )] #[post("/unit-property/new")] pub(crate) async fn register_unit_property( app: web::Data, unit: web::Json, _user: Identity, ) -> Result { let mut ops = Operations::new("register unit property"); let unit = UnitProperty::register(unit.name.clone(), unit.description.clone(), &mut ops); ops.apply(&app).await?; Ok(HttpResponse::Ok().json(unit.id)) }