From c91dce4f77ae12453203f0a28b91efb6533cc095 Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Tue, 9 Dec 2025 13:07:14 +0100 Subject: feat(rocie-server): Implement basic user handling and authentication --- crates/rocie-server/src/api/set/product.rs | 126 ----------------------------- 1 file changed, 126 deletions(-) delete mode 100644 crates/rocie-server/src/api/set/product.rs (limited to 'crates/rocie-server/src/api/set/product.rs') diff --git a/crates/rocie-server/src/api/set/product.rs b/crates/rocie-server/src/api/set/product.rs deleted file mode 100644 index 74a92d2..0000000 --- a/crates/rocie-server/src/api/set/product.rs +++ /dev/null @@ -1,126 +0,0 @@ -use actix_web::{HttpResponse, Responder, Result, post, web}; -use serde::Deserialize; -use utoipa::ToSchema; - -use crate::{ - app::App, - storage::sql::{ - barcode::Barcode, - insert::Operations, - product::{Product, ProductId, ProductIdStub}, - product_parent::ProductParentId, - unit::Unit, - unit_property::UnitPropertyId, - }, -}; - -#[derive(Deserialize, ToSchema)] -struct ProductStub { - /// The name of the product - name: String, - - /// The Unit Property to use for this product. - unit_property: UnitPropertyId, - - /// A description. - #[schema(nullable = false)] - description: Option, - - /// A parent of this product, otherwise the parent will be the root of the parent tree. - #[schema(nullable = false)] - parent: Option, -} - -/// Register a product -#[utoipa::path( - responses( - ( - status = 200, - description = "Product successfully registered in database", - body = ProductId, - ), - ( - status = INTERNAL_SERVER_ERROR, - description = "Server encountered error", - body = String, - ) - ), - request_body = ProductStub, -)] -#[post("/product/new")] -pub(crate) async fn register_product( - app: web::Data, - product_stub: web::Json, -) -> Result { - let mut ops = Operations::new("register product"); - - let product = Product::register( - product_stub.name.clone(), - product_stub.description.clone(), - product_stub.parent.into(), - product_stub.unit_property, - &mut ops, - ); - - ops.apply(&app).await?; - - Ok(HttpResponse::Ok().json(product.id)) -} - -/// Associate a barcode with a product -#[utoipa::path( - responses( - ( - status = OK, - description = "Barcode successfully associated with product", - ), - ( - status = NOT_FOUND, - description = "Product id not found in database", - ), - ( - status = FORBIDDEN, - description = "Unit used in request has not been registered yet", - body = String, - ), - ( - status = INTERNAL_SERVER_ERROR, - description = "Server encountered error", - body = String, - ) - ), - params ( - ( - "id" = ProductId, - description = "The id of the product to associated the barcode with" - ), - ), - request_body = Barcode, -)] -#[post("/product/{id}/associate")] -pub(crate) async fn associate_barcode( - app: web::Data, - id: web::Path, - barcode: web::Json, -) -> Result { - let mut ops = Operations::new("associated barcode with product"); - - { - let units = Unit::get_all(&app).await?; - if !units.into_iter().any(|unit| unit.id == barcode.amount.unit) { - return Ok(HttpResponse::Forbidden() - .body("The used unit has not been registered; it cannot be used.\n")); - } - } - - match Product::from_id(&app, id.into_inner().into()).await? { - Some(product) => { - product.associate_barcode(barcode.into_inner(), &mut ops); - - ops.apply(&app).await?; - - Ok(HttpResponse::Ok().finish()) - } - None => Ok(HttpResponse::NotFound().finish()), - } -} -- cgit 1.4.1