summary refs log tree commit diff stats
path: root/src/api
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-10-23 01:36:39 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-10-23 01:36:39 +0200
commit7bff22756beec82b4a1470e2d325b706dc56e5f2 (patch)
tree1566965125cfd5fbd73d654e9ee6ca8256301411 /src/api
parentfeat(form): Re-write the form macro as a proc macro (diff)
downloadweb-client-7bff22756beec82b4a1470e2d325b706dc56e5f2.zip
feat(buy): Provide basic buy interface
Diffstat (limited to 'src/api')
-rw-r--r--src/api/mod.rs56
1 files changed, 54 insertions, 2 deletions
diff --git a/src/api/mod.rs b/src/api/mod.rs
index 8b9e77d..3879223 100644
--- a/src/api/mod.rs
+++ b/src/api/mod.rs
@@ -6,10 +6,16 @@ use reactive_stores::Store;
 use rocie_client::{
     apis::{
         api_get_inventory_api::amount_by_id,
-        api_get_product_api::{product_by_id, products},
+        api_get_product_api::{
+            product_by_id, product_by_name, product_suggestion_by_name, products,
+        },
         api_get_unit_api::unit_by_id,
+        api_get_unit_property_api::unit_property_by_id,
+        api_set_barcode_api::buy_barcode, configuration::Configuration,
+    },
+    models::{
+        BarcodeId, Product, ProductAmount, ProductId, Unit, UnitId, UnitProperty, UnitPropertyId,
     },
-    models::{Product, ProductAmount, ProductId, Unit, UnitId},
 };
 
 use crate::{ConfigState, ConfigStateStoreFields};
@@ -26,12 +32,36 @@ pub(crate) async fn get_product_by_id(product_id: ProductId) -> Result<Product,
         .await
         .map_err(Into::<Error>::into)
 }
+pub(crate) async fn get_product_by_name(
+    name: String,
+) -> Result<
+    Product,
+    rocie_client::apis::Error<rocie_client::apis::api_get_product_api::ProductByNameError>,
+> {
+    let config = expect_context::<Store<ConfigState>>();
+    product_by_name(&config.config().read(), &name).await
+}
+pub(crate) async fn get_products_by_part_name(part_name: String) -> Result<Vec<Product>, Error> {
+    let config = expect_context::<Store<ConfigState>>();
+    product_suggestion_by_name(&config.config().read(), &part_name)
+        .await
+        .map_err(Into::<Error>::into)
+}
 pub(crate) async fn get_unit_by_id(unit_id: UnitId) -> Result<Unit, Error> {
     let config = expect_context::<Store<ConfigState>>();
     unit_by_id(&config.config().read(), unit_id)
         .await
         .map_err(Into::<Error>::into)
 }
+pub(crate) async fn get_unit_property_by_id(
+    unit_id: UnitPropertyId,
+) -> Result<UnitProperty, Error> {
+    let config = expect_context::<Store<ConfigState>>();
+    unit_property_by_id(&config.config().read(), unit_id)
+        .await
+        .map_err(Into::<Error>::into)
+}
+
 pub(crate) async fn get_full_product_by_id(
     id: ProductId,
 ) -> Result<(Product, ProductAmount, Unit), Error> {
@@ -41,6 +71,14 @@ pub(crate) async fn get_full_product_by_id(
 
     Ok::<_, Error>((product, amount, unit))
 }
+pub(crate) async fn get_product_unit_by_id(
+    id: ProductId,
+) -> Result<(Product, UnitProperty), Error> {
+    let product = get_product_by_id(id).await?;
+    let unit = get_unit_property_by_id(product.unit_property).await?;
+
+    Ok::<_, Error>((product, unit))
+}
 
 pub(crate) async fn get_products() -> Result<Vec<Product>, Error> {
     let config = expect_context::<Store<ConfigState>>();
@@ -48,3 +86,17 @@ pub(crate) async fn get_products() -> Result<Vec<Product>, Error> {
         .await
         .map_err(Into::<Error>::into)
 }
+
+pub(crate) async fn buy_barcode_wrapper(
+    config: &Configuration,
+    barcode_number: u32,
+) -> Result<(), Error> {
+    buy_barcode(
+        config,
+        BarcodeId {
+            value: barcode_number,
+        },
+    )
+    .await
+    .map_err(Into::<Error>::into)
+}