about summary refs log tree commit diff stats
path: root/crates/rocie-client/src/apis
diff options
context:
space:
mode:
Diffstat (limited to 'crates/rocie-client/src/apis')
-rw-r--r--crates/rocie-client/src/apis/api_get_auth_inventory_api.rs39
-rw-r--r--crates/rocie-client/src/apis/api_get_auth_product_api.rs259
-rw-r--r--crates/rocie-client/src/apis/api_get_auth_product_parent_api.rs85
-rw-r--r--crates/rocie-client/src/apis/api_get_auth_recipe_api.rs246
-rw-r--r--crates/rocie-client/src/apis/api_get_auth_recipe_parent_api.rs149
-rw-r--r--crates/rocie-client/src/apis/api_get_auth_refined_recipe_api.rs64
-rw-r--r--crates/rocie-client/src/apis/api_get_auth_unit_api.rs93
-rw-r--r--crates/rocie-client/src/apis/api_get_auth_unit_property_api.rs62
-rw-r--r--crates/rocie-client/src/apis/api_get_auth_user_api.rs62
-rw-r--r--crates/rocie-client/src/apis/api_get_no_auth_state_api.rs101
-rw-r--r--crates/rocie-client/src/apis/api_set_auth_barcode_api.rs67
-rw-r--r--crates/rocie-client/src/apis/api_set_auth_product_api.rs69
-rw-r--r--crates/rocie-client/src/apis/api_set_auth_product_parent_api.rs39
-rw-r--r--crates/rocie-client/src/apis/api_set_auth_recipe_api.rs39
-rw-r--r--crates/rocie-client/src/apis/api_set_auth_recipe_parent_api.rs64
-rw-r--r--crates/rocie-client/src/apis/api_set_auth_unit_api.rs39
-rw-r--r--crates/rocie-client/src/apis/api_set_auth_unit_property_api.rs39
-rw-r--r--crates/rocie-client/src/apis/api_set_auth_user_api.rs39
-rw-r--r--crates/rocie-client/src/apis/api_set_no_auth_user_api.rs73
-rw-r--r--crates/rocie-client/src/apis/configuration.rs13
-rw-r--r--crates/rocie-client/src/apis/mod.rs21
21 files changed, 911 insertions, 751 deletions
diff --git a/crates/rocie-client/src/apis/api_get_auth_inventory_api.rs b/crates/rocie-client/src/apis/api_get_auth_inventory_api.rs
index a8b1684..ff7125f 100644
--- a/crates/rocie-client/src/apis/api_get_auth_inventory_api.rs
+++ b/crates/rocie-client/src/apis/api_get_auth_inventory_api.rs
@@ -8,10 +8,12 @@
  * Generated by: https://openapi-generator.tech
  */
 
-use super::{ContentType, Error, configuration};
-use crate::{apis::ResponseContent, models};
+
 use reqwest;
 use serde::{Deserialize, Serialize, de::Error as _};
+use crate::{apis::ResponseContent, models};
+use super::{Error, configuration, ContentType};
+
 
 /// struct for typed errors of method [`amount_by_id`]
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -23,18 +25,12 @@ pub enum AmountByIdError {
     UnknownValue(serde_json::Value),
 }
 
-pub async fn amount_by_id(
-    configuration: &configuration::Configuration,
-    id: models::ProductId,
-) -> Result<models::ProductAmount, Error<AmountByIdError>> {
+
+pub async fn amount_by_id(configuration: &configuration::Configuration, id: models::ProductId) -> Result<models::ProductAmount, Error<AmountByIdError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_id = id;
+    let p_path_id = id;
 
-    let uri_str = format!(
-        "{}/inventory/{id}",
-        configuration.base_path,
-        id = p_id.to_string()
-    );
+    let uri_str = format!("{}/inventory/{id}", configuration.base_path, id=p_path_id.to_string());
     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
@@ -56,24 +52,13 @@ pub async fn amount_by_id(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `models::ProductAmount`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `models::ProductAmount`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::ProductAmount`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::ProductAmount`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<AmountByIdError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
+
diff --git a/crates/rocie-client/src/apis/api_get_auth_product_api.rs b/crates/rocie-client/src/apis/api_get_auth_product_api.rs
index e6a3db2..969d4e2 100644
--- a/crates/rocie-client/src/apis/api_get_auth_product_api.rs
+++ b/crates/rocie-client/src/apis/api_get_auth_product_api.rs
@@ -8,10 +8,12 @@
  * Generated by: https://openapi-generator.tech
  */
 
-use super::{ContentType, Error, configuration};
-use crate::{apis::ResponseContent, models};
+
 use reqwest;
 use serde::{Deserialize, Serialize, de::Error as _};
+use crate::{apis::ResponseContent, models};
+use super::{Error, configuration, ContentType};
+
 
 /// struct for typed errors of method [`product_by_id`]
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -80,18 +82,21 @@ pub enum ProductsRegisteredError {
     UnknownValue(serde_json::Value),
 }
 
-pub async fn product_by_id(
-    configuration: &configuration::Configuration,
-    id: models::ProductId,
-) -> Result<models::Product, Error<ProductByIdError>> {
+/// struct for typed errors of method [`products_without_product_parent`]
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(untagged)]
+pub enum ProductsWithoutProductParentError {
+    Status401(),
+    Status500(String),
+    UnknownValue(serde_json::Value),
+}
+
+
+pub async fn product_by_id(configuration: &configuration::Configuration, id: models::ProductId) -> Result<models::Product, Error<ProductByIdError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_id = id;
+    let p_path_id = id;
 
-    let uri_str = format!(
-        "{}/product/by-id/{id}",
-        configuration.base_path,
-        id = p_id.to_string()
-    );
+    let uri_str = format!("{}/product/by-id/{id}", configuration.base_path, id=p_path_id.to_string());
     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
@@ -113,40 +118,21 @@ pub async fn product_by_id(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `models::Product`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `models::Product`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Product`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::Product`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<ProductByIdError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
 
-pub async fn product_by_name(
-    configuration: &configuration::Configuration,
-    name: &str,
-) -> Result<models::Product, Error<ProductByNameError>> {
+pub async fn product_by_name(configuration: &configuration::Configuration, name: &str) -> Result<models::Product, Error<ProductByNameError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_name = name;
+    let p_path_name = name;
 
-    let uri_str = format!(
-        "{}/product/by-name/{name}",
-        configuration.base_path,
-        name = crate::apis::urlencode(p_name)
-    );
+    let uri_str = format!("{}/product/by-name/{name}", configuration.base_path, name=crate::apis::urlencode(p_path_name));
     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
@@ -168,40 +154,21 @@ pub async fn product_by_name(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `models::Product`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `models::Product`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Product`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::Product`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<ProductByNameError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
 
-pub async fn product_suggestion_by_name(
-    configuration: &configuration::Configuration,
-    name: &str,
-) -> Result<Vec<models::Product>, Error<ProductSuggestionByNameError>> {
+pub async fn product_suggestion_by_name(configuration: &configuration::Configuration, name: &str) -> Result<Vec<models::Product>, Error<ProductSuggestionByNameError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_name = name;
+    let p_path_name = name;
 
-    let uri_str = format!(
-        "{}/product/by-part-name/{name}",
-        configuration.base_path,
-        name = crate::apis::urlencode(p_name)
-    );
+    let uri_str = format!("{}/product/by-part-name/{name}", configuration.base_path, name=crate::apis::urlencode(p_path_name));
     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
@@ -223,41 +190,22 @@ pub async fn product_suggestion_by_name(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `Vec&lt;models::Product&gt;`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::Product&gt;`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::Product&gt;`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::Product&gt;`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<ProductSuggestionByNameError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
 
 /// This will only return products directly associated with this product parent id
-pub async fn products_by_product_parent_id_direct(
-    configuration: &configuration::Configuration,
-    id: models::ProductParentId,
-) -> Result<Vec<models::Product>, Error<ProductsByProductParentIdDirectError>> {
+pub async fn products_by_product_parent_id_direct(configuration: &configuration::Configuration, id: models::ProductParentId) -> Result<Vec<models::Product>, Error<ProductsByProductParentIdDirectError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_id = id;
+    let p_path_id = id;
 
-    let uri_str = format!(
-        "{}/product/by-product-parent-id-direct/{id}",
-        configuration.base_path,
-        id = p_id.to_string()
-    );
+    let uri_str = format!("{}/product/by-product-parent-id-direct/{id}", configuration.base_path, id=p_path_id.to_string());
     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
@@ -279,42 +227,22 @@ pub async fn products_by_product_parent_id_direct(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `Vec&lt;models::Product&gt;`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::Product&gt;`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::Product&gt;`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::Product&gt;`")))),
         }
     } else {
         let content = resp.text().await?;
-        let entity: Option<ProductsByProductParentIdDirectError> =
-            serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        let entity: Option<ProductsByProductParentIdDirectError> = serde_json::from_str(&content).ok();
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
 
 /// This will also return all products below this product parent id
-pub async fn products_by_product_parent_id_indirect(
-    configuration: &configuration::Configuration,
-    id: models::ProductParentId,
-) -> Result<Vec<models::Product>, Error<ProductsByProductParentIdIndirectError>> {
+pub async fn products_by_product_parent_id_indirect(configuration: &configuration::Configuration, id: models::ProductParentId) -> Result<Vec<models::Product>, Error<ProductsByProductParentIdIndirectError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_id = id;
+    let p_path_id = id;
 
-    let uri_str = format!(
-        "{}/product/by-product-parent-id-indirect/{id}",
-        configuration.base_path,
-        id = p_id.to_string()
-    );
+    let uri_str = format!("{}/product/by-product-parent-id-indirect/{id}", configuration.base_path, id=p_path_id.to_string());
     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
@@ -336,32 +264,18 @@ pub async fn products_by_product_parent_id_indirect(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `Vec&lt;models::Product&gt;`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::Product&gt;`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::Product&gt;`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::Product&gt;`")))),
         }
     } else {
         let content = resp.text().await?;
-        let entity: Option<ProductsByProductParentIdIndirectError> =
-            serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        let entity: Option<ProductsByProductParentIdIndirectError> = serde_json::from_str(&content).ok();
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
 
-pub async fn products_in_storage(
-    configuration: &configuration::Configuration,
-) -> Result<Vec<models::Product>, Error<ProductsInStorageError>> {
+pub async fn products_in_storage(configuration: &configuration::Configuration, ) -> Result<Vec<models::Product>, Error<ProductsInStorageError>> {
+
     let uri_str = format!("{}/products_in_storage/", configuration.base_path);
     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 
@@ -384,31 +298,18 @@ pub async fn products_in_storage(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `Vec&lt;models::Product&gt;`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::Product&gt;`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::Product&gt;`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::Product&gt;`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<ProductsInStorageError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
 
-pub async fn products_registered(
-    configuration: &configuration::Configuration,
-) -> Result<Vec<models::Product>, Error<ProductsRegisteredError>> {
+pub async fn products_registered(configuration: &configuration::Configuration, ) -> Result<Vec<models::Product>, Error<ProductsRegisteredError>> {
+
     let uri_str = format!("{}/products_registered/", configuration.base_path);
     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 
@@ -431,24 +332,48 @@ pub async fn products_registered(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `Vec&lt;models::Product&gt;`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::Product&gt;`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::Product&gt;`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::Product&gt;`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<ProductsRegisteredError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
+
+/// This will only return products without a product parent associated with it
+pub async fn products_without_product_parent(configuration: &configuration::Configuration, ) -> Result<Vec<models::Product>, Error<ProductsWithoutProductParentError>> {
+
+    let uri_str = format!("{}/product/without-product-parent", configuration.base_path);
+    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
+
+    if let Some(ref user_agent) = configuration.user_agent {
+        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
+    }
+
+    let req = req_builder.build()?;
+    let resp = configuration.client.execute(req).await?;
+
+    let status = resp.status();
+    let content_type = resp
+        .headers()
+        .get("content-type")
+        .and_then(|v| v.to_str().ok())
+        .unwrap_or("application/octet-stream");
+    let content_type = super::ContentType::from(content_type);
+
+    if !status.is_client_error() && !status.is_server_error() {
+        let content = resp.text().await?;
+        match content_type {
+            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::Product&gt;`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::Product&gt;`")))),
+        }
+    } else {
+        let content = resp.text().await?;
+        let entity: Option<ProductsWithoutProductParentError> = serde_json::from_str(&content).ok();
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
+    }
+}
+
diff --git a/crates/rocie-client/src/apis/api_get_auth_product_parent_api.rs b/crates/rocie-client/src/apis/api_get_auth_product_parent_api.rs
index b29a155..05f277f 100644
--- a/crates/rocie-client/src/apis/api_get_auth_product_parent_api.rs
+++ b/crates/rocie-client/src/apis/api_get_auth_product_parent_api.rs
@@ -8,10 +8,12 @@
  * Generated by: https://openapi-generator.tech
  */
 
-use super::{ContentType, Error, configuration};
-use crate::{apis::ResponseContent, models};
+
 use reqwest;
 use serde::{Deserialize, Serialize, de::Error as _};
+use crate::{apis::ResponseContent, models};
+use super::{Error, configuration, ContentType};
+
 
 /// struct for typed errors of method [`product_parents`]
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -40,9 +42,9 @@ pub enum ProductParentsUnderError {
     UnknownValue(serde_json::Value),
 }
 
-pub async fn product_parents(
-    configuration: &configuration::Configuration,
-) -> Result<Vec<models::ProductParent>, Error<ProductParentsError>> {
+
+pub async fn product_parents(configuration: &configuration::Configuration, ) -> Result<Vec<models::ProductParent>, Error<ProductParentsError>> {
+
     let uri_str = format!("{}/product_parents/", configuration.base_path);
     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 
@@ -65,31 +67,18 @@ pub async fn product_parents(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `Vec&lt;models::ProductParent&gt;`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::ProductParent&gt;`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::ProductParent&gt;`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::ProductParent&gt;`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<ProductParentsError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
 
-pub async fn product_parents_toplevel(
-    configuration: &configuration::Configuration,
-) -> Result<Vec<models::ProductParent>, Error<ProductParentsToplevelError>> {
+pub async fn product_parents_toplevel(configuration: &configuration::Configuration, ) -> Result<Vec<models::ProductParent>, Error<ProductParentsToplevelError>> {
+
     let uri_str = format!("{}/product_parents_toplevel/", configuration.base_path);
     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 
@@ -112,40 +101,21 @@ pub async fn product_parents_toplevel(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `Vec&lt;models::ProductParent&gt;`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::ProductParent&gt;`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::ProductParent&gt;`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::ProductParent&gt;`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<ProductParentsToplevelError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
 
-pub async fn product_parents_under(
-    configuration: &configuration::Configuration,
-    id: models::ProductParentId,
-) -> Result<Vec<models::ProductParent>, Error<ProductParentsUnderError>> {
+pub async fn product_parents_under(configuration: &configuration::Configuration, id: models::ProductParentId) -> Result<Vec<models::ProductParent>, Error<ProductParentsUnderError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_id = id;
+    let p_path_id = id;
 
-    let uri_str = format!(
-        "{}/product_parents_under/{id}",
-        configuration.base_path,
-        id = p_id.to_string()
-    );
+    let uri_str = format!("{}/product_parents_under/{id}", configuration.base_path, id=p_path_id.to_string());
     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
@@ -167,24 +137,13 @@ pub async fn product_parents_under(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `Vec&lt;models::ProductParent&gt;`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::ProductParent&gt;`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::ProductParent&gt;`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::ProductParent&gt;`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<ProductParentsUnderError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
+
diff --git a/crates/rocie-client/src/apis/api_get_auth_recipe_api.rs b/crates/rocie-client/src/apis/api_get_auth_recipe_api.rs
index 90420c9..10bf3e1 100644
--- a/crates/rocie-client/src/apis/api_get_auth_recipe_api.rs
+++ b/crates/rocie-client/src/apis/api_get_auth_recipe_api.rs
@@ -8,10 +8,12 @@
  * Generated by: https://openapi-generator.tech
  */
 
-use super::{ContentType, Error, configuration};
-use crate::{apis::ResponseContent, models};
+
 use reqwest;
 use serde::{Deserialize, Serialize, de::Error as _};
+use crate::{apis::ResponseContent, models};
+use super::{Error, configuration, ContentType};
+
 
 /// struct for typed errors of method [`recipe_by_id`]
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -23,6 +25,16 @@ pub enum RecipeByIdError {
     UnknownValue(serde_json::Value),
 }
 
+/// struct for typed errors of method [`recipe_by_name`]
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(untagged)]
+pub enum RecipeByNameError {
+    Status401(),
+    Status404(),
+    Status500(String),
+    UnknownValue(serde_json::Value),
+}
+
 /// struct for typed errors of method [`recipes`]
 #[derive(Debug, Clone, Serialize, Deserialize)]
 #[serde(untagged)]
@@ -32,18 +44,41 @@ pub enum RecipesError {
     UnknownValue(serde_json::Value),
 }
 
-pub async fn recipe_by_id(
-    configuration: &configuration::Configuration,
-    id: models::RecipeId,
-) -> Result<models::Recipe, Error<RecipeByIdError>> {
+/// struct for typed errors of method [`recipes_by_recipe_parent_id_direct`]
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(untagged)]
+pub enum RecipesByRecipeParentIdDirectError {
+    Status401(),
+    Status404(),
+    Status500(String),
+    UnknownValue(serde_json::Value),
+}
+
+/// struct for typed errors of method [`recipes_by_recipe_parent_id_indirect`]
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(untagged)]
+pub enum RecipesByRecipeParentIdIndirectError {
+    Status401(),
+    Status404(),
+    Status500(String),
+    UnknownValue(serde_json::Value),
+}
+
+/// struct for typed errors of method [`recipes_without_recipe_parent`]
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(untagged)]
+pub enum RecipesWithoutRecipeParentError {
+    Status401(),
+    Status500(String),
+    UnknownValue(serde_json::Value),
+}
+
+
+pub async fn recipe_by_id(configuration: &configuration::Configuration, id: models::RecipeId) -> Result<models::Recipe, Error<RecipeByIdError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_id = id;
+    let p_path_id = id;
 
-    let uri_str = format!(
-        "{}/recipe/by-id/{id}",
-        configuration.base_path,
-        id = p_id.to_string()
-    );
+    let uri_str = format!("{}/recipe/by-id/{id}", configuration.base_path, id=p_path_id.to_string());
     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
@@ -65,31 +100,54 @@ pub async fn recipe_by_id(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `models::Recipe`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `models::Recipe`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Recipe`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::Recipe`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<RecipeByIdError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
 
-pub async fn recipes(
-    configuration: &configuration::Configuration,
-) -> Result<models::Recipe, Error<RecipesError>> {
+pub async fn recipe_by_name(configuration: &configuration::Configuration, name: &str) -> Result<models::Recipe, Error<RecipeByNameError>> {
+    // add a prefix to parameters to efficiently prevent name collisions
+    let p_path_name = name;
+
+    let uri_str = format!("{}/recipe/by-name/{name}", configuration.base_path, name=crate::apis::urlencode(p_path_name));
+    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
+
+    if let Some(ref user_agent) = configuration.user_agent {
+        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
+    }
+
+    let req = req_builder.build()?;
+    let resp = configuration.client.execute(req).await?;
+
+    let status = resp.status();
+    let content_type = resp
+        .headers()
+        .get("content-type")
+        .and_then(|v| v.to_str().ok())
+        .unwrap_or("application/octet-stream");
+    let content_type = super::ContentType::from(content_type);
+
+    if !status.is_client_error() && !status.is_server_error() {
+        let content = resp.text().await?;
+        match content_type {
+            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Recipe`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::Recipe`")))),
+        }
+    } else {
+        let content = resp.text().await?;
+        let entity: Option<RecipeByNameError> = serde_json::from_str(&content).ok();
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
+    }
+}
+
+pub async fn recipes(configuration: &configuration::Configuration, ) -> Result<Vec<models::Recipe>, Error<RecipesError>> {
+
     let uri_str = format!("{}/recipe/all", configuration.base_path);
     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 
@@ -112,24 +170,122 @@ pub async fn recipes(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `models::Recipe`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `models::Recipe`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::Recipe&gt;`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::Recipe&gt;`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<RecipesError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
+
+/// This will only return recipes directly associated with this recipe parent id
+pub async fn recipes_by_recipe_parent_id_direct(configuration: &configuration::Configuration, id: models::RecipeParentId) -> Result<Vec<models::Recipe>, Error<RecipesByRecipeParentIdDirectError>> {
+    // add a prefix to parameters to efficiently prevent name collisions
+    let p_path_id = id;
+
+    let uri_str = format!("{}/recipe/by-recipe-parent-id-direct/{id}", configuration.base_path, id=p_path_id.to_string());
+    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
+
+    if let Some(ref user_agent) = configuration.user_agent {
+        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
+    }
+
+    let req = req_builder.build()?;
+    let resp = configuration.client.execute(req).await?;
+
+    let status = resp.status();
+    let content_type = resp
+        .headers()
+        .get("content-type")
+        .and_then(|v| v.to_str().ok())
+        .unwrap_or("application/octet-stream");
+    let content_type = super::ContentType::from(content_type);
+
+    if !status.is_client_error() && !status.is_server_error() {
+        let content = resp.text().await?;
+        match content_type {
+            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::Recipe&gt;`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::Recipe&gt;`")))),
+        }
+    } else {
+        let content = resp.text().await?;
+        let entity: Option<RecipesByRecipeParentIdDirectError> = serde_json::from_str(&content).ok();
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
+    }
+}
+
+/// This will also return all recipes below this recipe parent id
+pub async fn recipes_by_recipe_parent_id_indirect(configuration: &configuration::Configuration, id: models::RecipeParentId) -> Result<Vec<models::Recipe>, Error<RecipesByRecipeParentIdIndirectError>> {
+    // add a prefix to parameters to efficiently prevent name collisions
+    let p_path_id = id;
+
+    let uri_str = format!("{}/recipe/by-recipe-parent-id-indirect/{id}", configuration.base_path, id=p_path_id.to_string());
+    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
+
+    if let Some(ref user_agent) = configuration.user_agent {
+        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
+    }
+
+    let req = req_builder.build()?;
+    let resp = configuration.client.execute(req).await?;
+
+    let status = resp.status();
+    let content_type = resp
+        .headers()
+        .get("content-type")
+        .and_then(|v| v.to_str().ok())
+        .unwrap_or("application/octet-stream");
+    let content_type = super::ContentType::from(content_type);
+
+    if !status.is_client_error() && !status.is_server_error() {
+        let content = resp.text().await?;
+        match content_type {
+            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::Recipe&gt;`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::Recipe&gt;`")))),
+        }
+    } else {
+        let content = resp.text().await?;
+        let entity: Option<RecipesByRecipeParentIdIndirectError> = serde_json::from_str(&content).ok();
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
+    }
+}
+
+/// This will only return recipes without a recipe parent associated with it
+pub async fn recipes_without_recipe_parent(configuration: &configuration::Configuration, ) -> Result<Vec<models::Recipe>, Error<RecipesWithoutRecipeParentError>> {
+
+    let uri_str = format!("{}/recipe/without-recipe-parent", configuration.base_path);
+    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
+
+    if let Some(ref user_agent) = configuration.user_agent {
+        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
+    }
+
+    let req = req_builder.build()?;
+    let resp = configuration.client.execute(req).await?;
+
+    let status = resp.status();
+    let content_type = resp
+        .headers()
+        .get("content-type")
+        .and_then(|v| v.to_str().ok())
+        .unwrap_or("application/octet-stream");
+    let content_type = super::ContentType::from(content_type);
+
+    if !status.is_client_error() && !status.is_server_error() {
+        let content = resp.text().await?;
+        match content_type {
+            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::Recipe&gt;`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::Recipe&gt;`")))),
+        }
+    } else {
+        let content = resp.text().await?;
+        let entity: Option<RecipesWithoutRecipeParentError> = serde_json::from_str(&content).ok();
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
+    }
+}
+
diff --git a/crates/rocie-client/src/apis/api_get_auth_recipe_parent_api.rs b/crates/rocie-client/src/apis/api_get_auth_recipe_parent_api.rs
new file mode 100644
index 0000000..1aef8f8
--- /dev/null
+++ b/crates/rocie-client/src/apis/api_get_auth_recipe_parent_api.rs
@@ -0,0 +1,149 @@
+/*
+ * rocie-server
+ *
+ * An enterprise grocery management system - server
+ *
+ * The version of the OpenAPI document: 0.1.0
+ * Contact: benedikt.peetz@b-peetz.de
+ * Generated by: https://openapi-generator.tech
+ */
+
+
+use reqwest;
+use serde::{Deserialize, Serialize, de::Error as _};
+use crate::{apis::ResponseContent, models};
+use super::{Error, configuration, ContentType};
+
+
+/// struct for typed errors of method [`recipe_parents`]
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(untagged)]
+pub enum RecipeParentsError {
+    Status401(),
+    Status500(String),
+    UnknownValue(serde_json::Value),
+}
+
+/// struct for typed errors of method [`recipe_parents_toplevel`]
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(untagged)]
+pub enum RecipeParentsToplevelError {
+    Status401(),
+    Status500(String),
+    UnknownValue(serde_json::Value),
+}
+
+/// struct for typed errors of method [`recipe_parents_under`]
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(untagged)]
+pub enum RecipeParentsUnderError {
+    Status401(),
+    Status500(String),
+    UnknownValue(serde_json::Value),
+}
+
+
+pub async fn recipe_parents(configuration: &configuration::Configuration, ) -> Result<Vec<models::RecipeParent>, Error<RecipeParentsError>> {
+
+    let uri_str = format!("{}/recipe_parents/", configuration.base_path);
+    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
+
+    if let Some(ref user_agent) = configuration.user_agent {
+        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
+    }
+
+    let req = req_builder.build()?;
+    let resp = configuration.client.execute(req).await?;
+
+    let status = resp.status();
+    let content_type = resp
+        .headers()
+        .get("content-type")
+        .and_then(|v| v.to_str().ok())
+        .unwrap_or("application/octet-stream");
+    let content_type = super::ContentType::from(content_type);
+
+    if !status.is_client_error() && !status.is_server_error() {
+        let content = resp.text().await?;
+        match content_type {
+            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::RecipeParent&gt;`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::RecipeParent&gt;`")))),
+        }
+    } else {
+        let content = resp.text().await?;
+        let entity: Option<RecipeParentsError> = serde_json::from_str(&content).ok();
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
+    }
+}
+
+pub async fn recipe_parents_toplevel(configuration: &configuration::Configuration, ) -> Result<Vec<models::RecipeParent>, Error<RecipeParentsToplevelError>> {
+
+    let uri_str = format!("{}/recipe_parents_toplevel/", configuration.base_path);
+    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
+
+    if let Some(ref user_agent) = configuration.user_agent {
+        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
+    }
+
+    let req = req_builder.build()?;
+    let resp = configuration.client.execute(req).await?;
+
+    let status = resp.status();
+    let content_type = resp
+        .headers()
+        .get("content-type")
+        .and_then(|v| v.to_str().ok())
+        .unwrap_or("application/octet-stream");
+    let content_type = super::ContentType::from(content_type);
+
+    if !status.is_client_error() && !status.is_server_error() {
+        let content = resp.text().await?;
+        match content_type {
+            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::RecipeParent&gt;`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::RecipeParent&gt;`")))),
+        }
+    } else {
+        let content = resp.text().await?;
+        let entity: Option<RecipeParentsToplevelError> = serde_json::from_str(&content).ok();
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
+    }
+}
+
+pub async fn recipe_parents_under(configuration: &configuration::Configuration, id: models::RecipeParentId) -> Result<Vec<models::RecipeParent>, Error<RecipeParentsUnderError>> {
+    // add a prefix to parameters to efficiently prevent name collisions
+    let p_path_id = id;
+
+    let uri_str = format!("{}/recipe_parents_under/{id}", configuration.base_path, id=p_path_id.to_string());
+    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
+
+    if let Some(ref user_agent) = configuration.user_agent {
+        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
+    }
+
+    let req = req_builder.build()?;
+    let resp = configuration.client.execute(req).await?;
+
+    let status = resp.status();
+    let content_type = resp
+        .headers()
+        .get("content-type")
+        .and_then(|v| v.to_str().ok())
+        .unwrap_or("application/octet-stream");
+    let content_type = super::ContentType::from(content_type);
+
+    if !status.is_client_error() && !status.is_server_error() {
+        let content = resp.text().await?;
+        match content_type {
+            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::RecipeParent&gt;`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::RecipeParent&gt;`")))),
+        }
+    } else {
+        let content = resp.text().await?;
+        let entity: Option<RecipeParentsUnderError> = serde_json::from_str(&content).ok();
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
+    }
+}
+
diff --git a/crates/rocie-client/src/apis/api_get_auth_refined_recipe_api.rs b/crates/rocie-client/src/apis/api_get_auth_refined_recipe_api.rs
new file mode 100644
index 0000000..63a0d5d
--- /dev/null
+++ b/crates/rocie-client/src/apis/api_get_auth_refined_recipe_api.rs
@@ -0,0 +1,64 @@
+/*
+ * rocie-server
+ *
+ * An enterprise grocery management system - server
+ *
+ * The version of the OpenAPI document: 0.1.0
+ * Contact: benedikt.peetz@b-peetz.de
+ * Generated by: https://openapi-generator.tech
+ */
+
+
+use reqwest;
+use serde::{Deserialize, Serialize, de::Error as _};
+use crate::{apis::ResponseContent, models};
+use super::{Error, configuration, ContentType};
+
+
+/// struct for typed errors of method [`refined_recipe_by_id`]
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(untagged)]
+pub enum RefinedRecipeByIdError {
+    Status401(),
+    Status404(),
+    Status500(String),
+    UnknownValue(serde_json::Value),
+}
+
+
+pub async fn refined_recipe_by_id(configuration: &configuration::Configuration, id: models::RecipeId) -> Result<models::RefinedRecipe, Error<RefinedRecipeByIdError>> {
+    // add a prefix to parameters to efficiently prevent name collisions
+    let p_path_id = id;
+
+    let uri_str = format!("{}/refined-recipe/by-id/{id}", configuration.base_path, id=p_path_id.to_string());
+    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
+
+    if let Some(ref user_agent) = configuration.user_agent {
+        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
+    }
+
+    let req = req_builder.build()?;
+    let resp = configuration.client.execute(req).await?;
+
+    let status = resp.status();
+    let content_type = resp
+        .headers()
+        .get("content-type")
+        .and_then(|v| v.to_str().ok())
+        .unwrap_or("application/octet-stream");
+    let content_type = super::ContentType::from(content_type);
+
+    if !status.is_client_error() && !status.is_server_error() {
+        let content = resp.text().await?;
+        match content_type {
+            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::RefinedRecipe`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::RefinedRecipe`")))),
+        }
+    } else {
+        let content = resp.text().await?;
+        let entity: Option<RefinedRecipeByIdError> = serde_json::from_str(&content).ok();
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
+    }
+}
+
diff --git a/crates/rocie-client/src/apis/api_get_auth_unit_api.rs b/crates/rocie-client/src/apis/api_get_auth_unit_api.rs
index 5d17a74..caf3ab4 100644
--- a/crates/rocie-client/src/apis/api_get_auth_unit_api.rs
+++ b/crates/rocie-client/src/apis/api_get_auth_unit_api.rs
@@ -8,10 +8,12 @@
  * Generated by: https://openapi-generator.tech
  */
 
-use super::{ContentType, Error, configuration};
-use crate::{apis::ResponseContent, models};
+
 use reqwest;
 use serde::{Deserialize, Serialize, de::Error as _};
+use crate::{apis::ResponseContent, models};
+use super::{Error, configuration, ContentType};
+
 
 /// struct for typed errors of method [`unit_by_id`]
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -41,18 +43,12 @@ pub enum UnitsByPropertyIdError {
     UnknownValue(serde_json::Value),
 }
 
-pub async fn unit_by_id(
-    configuration: &configuration::Configuration,
-    id: models::UnitId,
-) -> Result<models::Unit, Error<UnitByIdError>> {
+
+pub async fn unit_by_id(configuration: &configuration::Configuration, id: models::UnitId) -> Result<models::Unit, Error<UnitByIdError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_id = id;
+    let p_path_id = id;
 
-    let uri_str = format!(
-        "{}/unit/{id}",
-        configuration.base_path,
-        id = p_id.to_string()
-    );
+    let uri_str = format!("{}/unit/{id}", configuration.base_path, id=p_path_id.to_string());
     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
@@ -74,31 +70,18 @@ pub async fn unit_by_id(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `models::Unit`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `models::Unit`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Unit`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::Unit`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<UnitByIdError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
 
-pub async fn units(
-    configuration: &configuration::Configuration,
-) -> Result<Vec<models::Unit>, Error<UnitsError>> {
+pub async fn units(configuration: &configuration::Configuration, ) -> Result<Vec<models::Unit>, Error<UnitsError>> {
+
     let uri_str = format!("{}/units/", configuration.base_path);
     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 
@@ -121,40 +104,21 @@ pub async fn units(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `Vec&lt;models::Unit&gt;`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::Unit&gt;`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::Unit&gt;`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::Unit&gt;`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<UnitsError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
 
-pub async fn units_by_property_id(
-    configuration: &configuration::Configuration,
-    id: models::UnitPropertyId,
-) -> Result<Vec<models::Unit>, Error<UnitsByPropertyIdError>> {
+pub async fn units_by_property_id(configuration: &configuration::Configuration, id: models::UnitPropertyId) -> Result<Vec<models::Unit>, Error<UnitsByPropertyIdError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_id = id;
+    let p_path_id = id;
 
-    let uri_str = format!(
-        "{}/units-by-property/{id}",
-        configuration.base_path,
-        id = p_id.to_string()
-    );
+    let uri_str = format!("{}/units-by-property/{id}", configuration.base_path, id=p_path_id.to_string());
     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
@@ -176,24 +140,13 @@ pub async fn units_by_property_id(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `Vec&lt;models::Unit&gt;`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::Unit&gt;`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::Unit&gt;`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::Unit&gt;`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<UnitsByPropertyIdError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
+
diff --git a/crates/rocie-client/src/apis/api_get_auth_unit_property_api.rs b/crates/rocie-client/src/apis/api_get_auth_unit_property_api.rs
index a2ac138..7e1b1a9 100644
--- a/crates/rocie-client/src/apis/api_get_auth_unit_property_api.rs
+++ b/crates/rocie-client/src/apis/api_get_auth_unit_property_api.rs
@@ -8,10 +8,12 @@
  * Generated by: https://openapi-generator.tech
  */
 
-use super::{ContentType, Error, configuration};
-use crate::{apis::ResponseContent, models};
+
 use reqwest;
 use serde::{Deserialize, Serialize, de::Error as _};
+use crate::{apis::ResponseContent, models};
+use super::{Error, configuration, ContentType};
+
 
 /// struct for typed errors of method [`unit_properties`]
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -32,9 +34,9 @@ pub enum UnitPropertyByIdError {
     UnknownValue(serde_json::Value),
 }
 
-pub async fn unit_properties(
-    configuration: &configuration::Configuration,
-) -> Result<Vec<models::UnitProperty>, Error<UnitPropertiesError>> {
+
+pub async fn unit_properties(configuration: &configuration::Configuration, ) -> Result<Vec<models::UnitProperty>, Error<UnitPropertiesError>> {
+
     let uri_str = format!("{}/unit-properties/", configuration.base_path);
     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 
@@ -57,40 +59,21 @@ pub async fn unit_properties(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `Vec&lt;models::UnitProperty&gt;`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::UnitProperty&gt;`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::UnitProperty&gt;`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::UnitProperty&gt;`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<UnitPropertiesError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
 
-pub async fn unit_property_by_id(
-    configuration: &configuration::Configuration,
-    id: models::UnitPropertyId,
-) -> Result<models::UnitProperty, Error<UnitPropertyByIdError>> {
+pub async fn unit_property_by_id(configuration: &configuration::Configuration, id: models::UnitPropertyId) -> Result<models::UnitProperty, Error<UnitPropertyByIdError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_id = id;
+    let p_path_id = id;
 
-    let uri_str = format!(
-        "{}/unit-property/{id}",
-        configuration.base_path,
-        id = p_id.to_string()
-    );
+    let uri_str = format!("{}/unit-property/{id}", configuration.base_path, id=p_path_id.to_string());
     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
@@ -112,24 +95,13 @@ pub async fn unit_property_by_id(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `models::UnitProperty`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `models::UnitProperty`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::UnitProperty`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::UnitProperty`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<UnitPropertyByIdError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
+
diff --git a/crates/rocie-client/src/apis/api_get_auth_user_api.rs b/crates/rocie-client/src/apis/api_get_auth_user_api.rs
index 64d4671..5d98f15 100644
--- a/crates/rocie-client/src/apis/api_get_auth_user_api.rs
+++ b/crates/rocie-client/src/apis/api_get_auth_user_api.rs
@@ -8,10 +8,12 @@
  * Generated by: https://openapi-generator.tech
  */
 
-use super::{ContentType, Error, configuration};
-use crate::{apis::ResponseContent, models};
+
 use reqwest;
 use serde::{Deserialize, Serialize, de::Error as _};
+use crate::{apis::ResponseContent, models};
+use super::{Error, configuration, ContentType};
+
 
 /// struct for typed errors of method [`user_by_id`]
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -33,18 +35,12 @@ pub enum UsersError {
     UnknownValue(serde_json::Value),
 }
 
-pub async fn user_by_id(
-    configuration: &configuration::Configuration,
-    id: models::UserId,
-) -> Result<models::User, Error<UserByIdError>> {
+
+pub async fn user_by_id(configuration: &configuration::Configuration, id: models::UserId) -> Result<models::User, Error<UserByIdError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_id = id;
+    let p_path_id = id;
 
-    let uri_str = format!(
-        "{}/user/{id}",
-        configuration.base_path,
-        id = p_id.to_string()
-    );
+    let uri_str = format!("{}/user/{id}", configuration.base_path, id=p_path_id.to_string());
     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
@@ -66,31 +62,18 @@ pub async fn user_by_id(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `models::User`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `models::User`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::User`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::User`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<UserByIdError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
 
-pub async fn users(
-    configuration: &configuration::Configuration,
-) -> Result<Vec<models::User>, Error<UsersError>> {
+pub async fn users(configuration: &configuration::Configuration, ) -> Result<Vec<models::User>, Error<UsersError>> {
+
     let uri_str = format!("{}/users", configuration.base_path);
     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 
@@ -113,24 +96,13 @@ pub async fn users(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `Vec&lt;models::User&gt;`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::User&gt;`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::User&gt;`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::User&gt;`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<UsersError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
+
diff --git a/crates/rocie-client/src/apis/api_get_no_auth_state_api.rs b/crates/rocie-client/src/apis/api_get_no_auth_state_api.rs
new file mode 100644
index 0000000..c4ec2cd
--- /dev/null
+++ b/crates/rocie-client/src/apis/api_get_no_auth_state_api.rs
@@ -0,0 +1,101 @@
+/*
+ * rocie-server
+ *
+ * An enterprise grocery management system - server
+ *
+ * The version of the OpenAPI document: 0.1.0
+ * Contact: benedikt.peetz@b-peetz.de
+ * Generated by: https://openapi-generator.tech
+ */
+
+
+use reqwest;
+use serde::{Deserialize, Serialize, de::Error as _};
+use crate::{apis::ResponseContent, models};
+use super::{Error, configuration, ContentType};
+
+
+/// struct for typed errors of method [`can_be_provisioned`]
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(untagged)]
+pub enum CanBeProvisionedError {
+    Status500(String),
+    UnknownValue(serde_json::Value),
+}
+
+/// struct for typed errors of method [`is_logged_in`]
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(untagged)]
+pub enum IsLoggedInError {
+    UnknownValue(serde_json::Value),
+}
+
+
+pub async fn can_be_provisioned(configuration: &configuration::Configuration, ) -> Result<bool, Error<CanBeProvisionedError>> {
+
+    let uri_str = format!("{}/can-be-provisioned", configuration.base_path);
+    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
+
+    if let Some(ref user_agent) = configuration.user_agent {
+        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
+    }
+
+    let req = req_builder.build()?;
+    let resp = configuration.client.execute(req).await?;
+
+    let status = resp.status();
+    let content_type = resp
+        .headers()
+        .get("content-type")
+        .and_then(|v| v.to_str().ok())
+        .unwrap_or("application/octet-stream");
+    let content_type = super::ContentType::from(content_type);
+
+    if !status.is_client_error() && !status.is_server_error() {
+        let content = resp.text().await?;
+        match content_type {
+            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `bool`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `bool`")))),
+        }
+    } else {
+        let content = resp.text().await?;
+        let entity: Option<CanBeProvisionedError> = serde_json::from_str(&content).ok();
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
+    }
+}
+
+pub async fn is_logged_in(configuration: &configuration::Configuration, ) -> Result<bool, Error<IsLoggedInError>> {
+
+    let uri_str = format!("{}/is-logged-in", configuration.base_path);
+    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
+
+    if let Some(ref user_agent) = configuration.user_agent {
+        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
+    }
+
+    let req = req_builder.build()?;
+    let resp = configuration.client.execute(req).await?;
+
+    let status = resp.status();
+    let content_type = resp
+        .headers()
+        .get("content-type")
+        .and_then(|v| v.to_str().ok())
+        .unwrap_or("application/octet-stream");
+    let content_type = super::ContentType::from(content_type);
+
+    if !status.is_client_error() && !status.is_server_error() {
+        let content = resp.text().await?;
+        match content_type {
+            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `bool`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `bool`")))),
+        }
+    } else {
+        let content = resp.text().await?;
+        let entity: Option<IsLoggedInError> = serde_json::from_str(&content).ok();
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
+    }
+}
+
diff --git a/crates/rocie-client/src/apis/api_set_auth_barcode_api.rs b/crates/rocie-client/src/apis/api_set_auth_barcode_api.rs
index 55f813e..066d8e1 100644
--- a/crates/rocie-client/src/apis/api_set_auth_barcode_api.rs
+++ b/crates/rocie-client/src/apis/api_set_auth_barcode_api.rs
@@ -8,10 +8,12 @@
  * Generated by: https://openapi-generator.tech
  */
 
-use super::{ContentType, Error, configuration};
-use crate::{apis::ResponseContent, models};
+
 use reqwest;
 use serde::{Deserialize, Serialize, de::Error as _};
+use crate::{apis::ResponseContent, models};
+use super::{Error, configuration, ContentType};
+
 
 /// struct for typed errors of method [`buy_barcode`]
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -33,24 +35,14 @@ pub enum ConsumeBarcodeError {
     UnknownValue(serde_json::Value),
 }
 
-pub async fn buy_barcode(
-    configuration: &configuration::Configuration,
-    barcode_id: models::BarcodeId,
-    times: u32,
-) -> Result<(), Error<BuyBarcodeError>> {
+
+pub async fn buy_barcode(configuration: &configuration::Configuration, barcode_id: models::BarcodeId, times: u32) -> Result<(), Error<BuyBarcodeError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_barcode_id = barcode_id;
-    let p_times = times;
-
-    let uri_str = format!(
-        "{}/barcode/{barcode_id}/buy/{times}",
-        configuration.base_path,
-        barcode_id = p_barcode_id.to_string(),
-        times = p_times
-    );
-    let mut req_builder = configuration
-        .client
-        .request(reqwest::Method::POST, &uri_str);
+    let p_path_barcode_id = barcode_id;
+    let p_path_times = times;
+
+    let uri_str = format!("{}/barcode/{barcode_id}/buy/{times}", configuration.base_path, barcode_id=p_path_barcode_id.to_string(), times=p_path_times);
+    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
@@ -66,36 +58,22 @@ pub async fn buy_barcode(
     } else {
         let content = resp.text().await?;
         let entity: Option<BuyBarcodeError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
 
-pub async fn consume_barcode(
-    configuration: &configuration::Configuration,
-    id: models::BarcodeId,
-    unit_amount: models::UnitAmount,
-) -> Result<(), Error<ConsumeBarcodeError>> {
+pub async fn consume_barcode(configuration: &configuration::Configuration, id: models::BarcodeId, unit_amount: models::UnitAmount) -> Result<(), Error<ConsumeBarcodeError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_id = id;
-    let p_unit_amount = unit_amount;
-
-    let uri_str = format!(
-        "{}/barcode/{id}/consume",
-        configuration.base_path,
-        id = p_id.to_string()
-    );
-    let mut req_builder = configuration
-        .client
-        .request(reqwest::Method::POST, &uri_str);
+    let p_path_id = id;
+    let p_body_unit_amount = unit_amount;
+
+    let uri_str = format!("{}/barcode/{id}/consume", configuration.base_path, id=p_path_id.to_string());
+    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
     }
-    req_builder = req_builder.json(&p_unit_amount);
+    req_builder = req_builder.json(&p_body_unit_amount);
 
     let req = req_builder.build()?;
     let resp = configuration.client.execute(req).await?;
@@ -107,10 +85,7 @@ pub async fn consume_barcode(
     } else {
         let content = resp.text().await?;
         let entity: Option<ConsumeBarcodeError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
+
diff --git a/crates/rocie-client/src/apis/api_set_auth_product_api.rs b/crates/rocie-client/src/apis/api_set_auth_product_api.rs
index e29c7f1..3b4ed2f 100644
--- a/crates/rocie-client/src/apis/api_set_auth_product_api.rs
+++ b/crates/rocie-client/src/apis/api_set_auth_product_api.rs
@@ -8,10 +8,12 @@
  * Generated by: https://openapi-generator.tech
  */
 
-use super::{ContentType, Error, configuration};
-use crate::{apis::ResponseContent, models};
+
 use reqwest;
 use serde::{Deserialize, Serialize, de::Error as _};
+use crate::{apis::ResponseContent, models};
+use super::{Error, configuration, ContentType};
+
 
 /// struct for typed errors of method [`associate_barcode`]
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -33,28 +35,19 @@ pub enum RegisterProductError {
     UnknownValue(serde_json::Value),
 }
 
-pub async fn associate_barcode(
-    configuration: &configuration::Configuration,
-    id: models::ProductId,
-    barcode: models::Barcode,
-) -> Result<(), Error<AssociateBarcodeError>> {
+
+pub async fn associate_barcode(configuration: &configuration::Configuration, id: models::ProductId, barcode: models::Barcode) -> Result<(), Error<AssociateBarcodeError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_id = id;
-    let p_barcode = barcode;
-
-    let uri_str = format!(
-        "{}/product/{id}/associate",
-        configuration.base_path,
-        id = p_id.to_string()
-    );
-    let mut req_builder = configuration
-        .client
-        .request(reqwest::Method::POST, &uri_str);
+    let p_path_id = id;
+    let p_body_barcode = barcode;
+
+    let uri_str = format!("{}/product/{id}/associate", configuration.base_path, id=p_path_id.to_string());
+    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
     }
-    req_builder = req_builder.json(&p_barcode);
+    req_builder = req_builder.json(&p_body_barcode);
 
     let req = req_builder.build()?;
     let resp = configuration.client.execute(req).await?;
@@ -66,30 +59,21 @@ pub async fn associate_barcode(
     } else {
         let content = resp.text().await?;
         let entity: Option<AssociateBarcodeError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
 
-pub async fn register_product(
-    configuration: &configuration::Configuration,
-    product_stub: models::ProductStub,
-) -> Result<models::ProductId, Error<RegisterProductError>> {
+pub async fn register_product(configuration: &configuration::Configuration, product_stub: models::ProductStub) -> Result<models::ProductId, Error<RegisterProductError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_product_stub = product_stub;
+    let p_body_product_stub = product_stub;
 
     let uri_str = format!("{}/product/new", configuration.base_path);
-    let mut req_builder = configuration
-        .client
-        .request(reqwest::Method::POST, &uri_str);
+    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
     }
-    req_builder = req_builder.json(&p_product_stub);
+    req_builder = req_builder.json(&p_body_product_stub);
 
     let req = req_builder.build()?;
     let resp = configuration.client.execute(req).await?;
@@ -106,24 +90,13 @@ pub async fn register_product(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `models::ProductId`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `models::ProductId`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::ProductId`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::ProductId`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<RegisterProductError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
+
diff --git a/crates/rocie-client/src/apis/api_set_auth_product_parent_api.rs b/crates/rocie-client/src/apis/api_set_auth_product_parent_api.rs
index f42dd99..990554c 100644
--- a/crates/rocie-client/src/apis/api_set_auth_product_parent_api.rs
+++ b/crates/rocie-client/src/apis/api_set_auth_product_parent_api.rs
@@ -8,10 +8,12 @@
  * Generated by: https://openapi-generator.tech
  */
 
-use super::{ContentType, Error, configuration};
-use crate::{apis::ResponseContent, models};
+
 use reqwest;
 use serde::{Deserialize, Serialize, de::Error as _};
+use crate::{apis::ResponseContent, models};
+use super::{Error, configuration, ContentType};
+
 
 /// struct for typed errors of method [`register_product_parent`]
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -22,22 +24,18 @@ pub enum RegisterProductParentError {
     UnknownValue(serde_json::Value),
 }
 
-pub async fn register_product_parent(
-    configuration: &configuration::Configuration,
-    product_parent_stub: models::ProductParentStub,
-) -> Result<models::ProductParentId, Error<RegisterProductParentError>> {
+
+pub async fn register_product_parent(configuration: &configuration::Configuration, product_parent_stub: models::ProductParentStub) -> Result<models::ProductParentId, Error<RegisterProductParentError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_product_parent_stub = product_parent_stub;
+    let p_body_product_parent_stub = product_parent_stub;
 
     let uri_str = format!("{}/product_parent/new", configuration.base_path);
-    let mut req_builder = configuration
-        .client
-        .request(reqwest::Method::POST, &uri_str);
+    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
     }
-    req_builder = req_builder.json(&p_product_parent_stub);
+    req_builder = req_builder.json(&p_body_product_parent_stub);
 
     let req = req_builder.build()?;
     let resp = configuration.client.execute(req).await?;
@@ -54,24 +52,13 @@ pub async fn register_product_parent(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `models::ProductParentId`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `models::ProductParentId`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::ProductParentId`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::ProductParentId`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<RegisterProductParentError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
+
diff --git a/crates/rocie-client/src/apis/api_set_auth_recipe_api.rs b/crates/rocie-client/src/apis/api_set_auth_recipe_api.rs
index 8df320d..8b847f0 100644
--- a/crates/rocie-client/src/apis/api_set_auth_recipe_api.rs
+++ b/crates/rocie-client/src/apis/api_set_auth_recipe_api.rs
@@ -8,10 +8,12 @@
  * Generated by: https://openapi-generator.tech
  */
 
-use super::{ContentType, Error, configuration};
-use crate::{apis::ResponseContent, models};
+
 use reqwest;
 use serde::{Deserialize, Serialize, de::Error as _};
+use crate::{apis::ResponseContent, models};
+use super::{Error, configuration, ContentType};
+
 
 /// struct for typed errors of method [`add_recipe`]
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -22,22 +24,18 @@ pub enum AddRecipeError {
     UnknownValue(serde_json::Value),
 }
 
-pub async fn add_recipe(
-    configuration: &configuration::Configuration,
-    recipe_stub: models::RecipeStub,
-) -> Result<models::RecipeId, Error<AddRecipeError>> {
+
+pub async fn add_recipe(configuration: &configuration::Configuration, recipe_stub: models::RecipeStub) -> Result<models::RecipeId, Error<AddRecipeError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_recipe_stub = recipe_stub;
+    let p_body_recipe_stub = recipe_stub;
 
     let uri_str = format!("{}/recipe/new", configuration.base_path);
-    let mut req_builder = configuration
-        .client
-        .request(reqwest::Method::POST, &uri_str);
+    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
     }
-    req_builder = req_builder.json(&p_recipe_stub);
+    req_builder = req_builder.json(&p_body_recipe_stub);
 
     let req = req_builder.build()?;
     let resp = configuration.client.execute(req).await?;
@@ -54,24 +52,13 @@ pub async fn add_recipe(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `models::RecipeId`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `models::RecipeId`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::RecipeId`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::RecipeId`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<AddRecipeError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
+
diff --git a/crates/rocie-client/src/apis/api_set_auth_recipe_parent_api.rs b/crates/rocie-client/src/apis/api_set_auth_recipe_parent_api.rs
new file mode 100644
index 0000000..27aef14
--- /dev/null
+++ b/crates/rocie-client/src/apis/api_set_auth_recipe_parent_api.rs
@@ -0,0 +1,64 @@
+/*
+ * rocie-server
+ *
+ * An enterprise grocery management system - server
+ *
+ * The version of the OpenAPI document: 0.1.0
+ * Contact: benedikt.peetz@b-peetz.de
+ * Generated by: https://openapi-generator.tech
+ */
+
+
+use reqwest;
+use serde::{Deserialize, Serialize, de::Error as _};
+use crate::{apis::ResponseContent, models};
+use super::{Error, configuration, ContentType};
+
+
+/// struct for typed errors of method [`register_recipe_parent`]
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(untagged)]
+pub enum RegisterRecipeParentError {
+    Status401(),
+    Status500(String),
+    UnknownValue(serde_json::Value),
+}
+
+
+pub async fn register_recipe_parent(configuration: &configuration::Configuration, recipe_parent_stub: models::RecipeParentStub) -> Result<models::RecipeParentId, Error<RegisterRecipeParentError>> {
+    // add a prefix to parameters to efficiently prevent name collisions
+    let p_body_recipe_parent_stub = recipe_parent_stub;
+
+    let uri_str = format!("{}/recipe_parent/new", configuration.base_path);
+    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
+
+    if let Some(ref user_agent) = configuration.user_agent {
+        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
+    }
+    req_builder = req_builder.json(&p_body_recipe_parent_stub);
+
+    let req = req_builder.build()?;
+    let resp = configuration.client.execute(req).await?;
+
+    let status = resp.status();
+    let content_type = resp
+        .headers()
+        .get("content-type")
+        .and_then(|v| v.to_str().ok())
+        .unwrap_or("application/octet-stream");
+    let content_type = super::ContentType::from(content_type);
+
+    if !status.is_client_error() && !status.is_server_error() {
+        let content = resp.text().await?;
+        match content_type {
+            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::RecipeParentId`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::RecipeParentId`")))),
+        }
+    } else {
+        let content = resp.text().await?;
+        let entity: Option<RegisterRecipeParentError> = serde_json::from_str(&content).ok();
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
+    }
+}
+
diff --git a/crates/rocie-client/src/apis/api_set_auth_unit_api.rs b/crates/rocie-client/src/apis/api_set_auth_unit_api.rs
index d9bf507..aa95127 100644
--- a/crates/rocie-client/src/apis/api_set_auth_unit_api.rs
+++ b/crates/rocie-client/src/apis/api_set_auth_unit_api.rs
@@ -8,10 +8,12 @@
  * Generated by: https://openapi-generator.tech
  */
 
-use super::{ContentType, Error, configuration};
-use crate::{apis::ResponseContent, models};
+
 use reqwest;
 use serde::{Deserialize, Serialize, de::Error as _};
+use crate::{apis::ResponseContent, models};
+use super::{Error, configuration, ContentType};
+
 
 /// struct for typed errors of method [`register_unit`]
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -22,22 +24,18 @@ pub enum RegisterUnitError {
     UnknownValue(serde_json::Value),
 }
 
-pub async fn register_unit(
-    configuration: &configuration::Configuration,
-    unit_stub: models::UnitStub,
-) -> Result<models::UnitId, Error<RegisterUnitError>> {
+
+pub async fn register_unit(configuration: &configuration::Configuration, unit_stub: models::UnitStub) -> Result<models::UnitId, Error<RegisterUnitError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_unit_stub = unit_stub;
+    let p_body_unit_stub = unit_stub;
 
     let uri_str = format!("{}/unit/new", configuration.base_path);
-    let mut req_builder = configuration
-        .client
-        .request(reqwest::Method::POST, &uri_str);
+    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
     }
-    req_builder = req_builder.json(&p_unit_stub);
+    req_builder = req_builder.json(&p_body_unit_stub);
 
     let req = req_builder.build()?;
     let resp = configuration.client.execute(req).await?;
@@ -54,24 +52,13 @@ pub async fn register_unit(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `models::UnitId`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `models::UnitId`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::UnitId`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::UnitId`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<RegisterUnitError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
+
diff --git a/crates/rocie-client/src/apis/api_set_auth_unit_property_api.rs b/crates/rocie-client/src/apis/api_set_auth_unit_property_api.rs
index cb59235..eb78fac 100644
--- a/crates/rocie-client/src/apis/api_set_auth_unit_property_api.rs
+++ b/crates/rocie-client/src/apis/api_set_auth_unit_property_api.rs
@@ -8,10 +8,12 @@
  * Generated by: https://openapi-generator.tech
  */
 
-use super::{ContentType, Error, configuration};
-use crate::{apis::ResponseContent, models};
+
 use reqwest;
 use serde::{Deserialize, Serialize, de::Error as _};
+use crate::{apis::ResponseContent, models};
+use super::{Error, configuration, ContentType};
+
 
 /// struct for typed errors of method [`register_unit_property`]
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -22,22 +24,18 @@ pub enum RegisterUnitPropertyError {
     UnknownValue(serde_json::Value),
 }
 
-pub async fn register_unit_property(
-    configuration: &configuration::Configuration,
-    unit_property_stub: models::UnitPropertyStub,
-) -> Result<models::UnitPropertyId, Error<RegisterUnitPropertyError>> {
+
+pub async fn register_unit_property(configuration: &configuration::Configuration, unit_property_stub: models::UnitPropertyStub) -> Result<models::UnitPropertyId, Error<RegisterUnitPropertyError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_unit_property_stub = unit_property_stub;
+    let p_body_unit_property_stub = unit_property_stub;
 
     let uri_str = format!("{}/unit-property/new", configuration.base_path);
-    let mut req_builder = configuration
-        .client
-        .request(reqwest::Method::POST, &uri_str);
+    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
     }
-    req_builder = req_builder.json(&p_unit_property_stub);
+    req_builder = req_builder.json(&p_body_unit_property_stub);
 
     let req = req_builder.build()?;
     let resp = configuration.client.execute(req).await?;
@@ -54,24 +52,13 @@ pub async fn register_unit_property(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `models::UnitPropertyId`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `models::UnitPropertyId`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::UnitPropertyId`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::UnitPropertyId`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<RegisterUnitPropertyError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
+
diff --git a/crates/rocie-client/src/apis/api_set_auth_user_api.rs b/crates/rocie-client/src/apis/api_set_auth_user_api.rs
index 758b707..516ea1e 100644
--- a/crates/rocie-client/src/apis/api_set_auth_user_api.rs
+++ b/crates/rocie-client/src/apis/api_set_auth_user_api.rs
@@ -8,10 +8,12 @@
  * Generated by: https://openapi-generator.tech
  */
 
-use super::{ContentType, Error, configuration};
-use crate::{apis::ResponseContent, models};
+
 use reqwest;
 use serde::{Deserialize, Serialize, de::Error as _};
+use crate::{apis::ResponseContent, models};
+use super::{Error, configuration, ContentType};
+
 
 /// struct for typed errors of method [`register_user`]
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -22,22 +24,18 @@ pub enum RegisterUserError {
     UnknownValue(serde_json::Value),
 }
 
-pub async fn register_user(
-    configuration: &configuration::Configuration,
-    user_stub: models::UserStub,
-) -> Result<models::UserId, Error<RegisterUserError>> {
+
+pub async fn register_user(configuration: &configuration::Configuration, user_stub: models::UserStub) -> Result<models::UserId, Error<RegisterUserError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_user_stub = user_stub;
+    let p_body_user_stub = user_stub;
 
     let uri_str = format!("{}/user/new", configuration.base_path);
-    let mut req_builder = configuration
-        .client
-        .request(reqwest::Method::POST, &uri_str);
+    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
     }
-    req_builder = req_builder.json(&p_user_stub);
+    req_builder = req_builder.json(&p_body_user_stub);
 
     let req = req_builder.build()?;
     let resp = configuration.client.execute(req).await?;
@@ -54,24 +52,13 @@ pub async fn register_user(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `models::UserId`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `models::UserId`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::UserId`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::UserId`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<RegisterUserError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
+
diff --git a/crates/rocie-client/src/apis/api_set_no_auth_user_api.rs b/crates/rocie-client/src/apis/api_set_no_auth_user_api.rs
index 1d203c5..1db2d9c 100644
--- a/crates/rocie-client/src/apis/api_set_no_auth_user_api.rs
+++ b/crates/rocie-client/src/apis/api_set_no_auth_user_api.rs
@@ -8,10 +8,12 @@
  * Generated by: https://openapi-generator.tech
  */
 
-use super::{ContentType, Error, configuration};
-use crate::{apis::ResponseContent, models};
+
 use reqwest;
 use serde::{Deserialize, Serialize, de::Error as _};
+use crate::{apis::ResponseContent, models};
+use super::{Error, configuration, ContentType};
+
 
 /// struct for typed errors of method [`login`]
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -40,22 +42,18 @@ pub enum ProvisionError {
     UnknownValue(serde_json::Value),
 }
 
-pub async fn login(
-    configuration: &configuration::Configuration,
-    login_info: models::LoginInfo,
-) -> Result<(), Error<LoginError>> {
+
+pub async fn login(configuration: &configuration::Configuration, login_info: models::LoginInfo) -> Result<(), Error<LoginError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_login_info = login_info;
+    let p_body_login_info = login_info;
 
     let uri_str = format!("{}/login", configuration.base_path);
-    let mut req_builder = configuration
-        .client
-        .request(reqwest::Method::POST, &uri_str);
+    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
     }
-    req_builder = req_builder.json(&p_login_info);
+    req_builder = req_builder.json(&p_body_login_info);
 
     let req = req_builder.build()?;
     let resp = configuration.client.execute(req).await?;
@@ -67,21 +65,14 @@ pub async fn login(
     } else {
         let content = resp.text().await?;
         let entity: Option<LoginError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
 
-pub async fn logout(
-    configuration: &configuration::Configuration,
-) -> Result<(), Error<LogoutError>> {
+pub async fn logout(configuration: &configuration::Configuration, ) -> Result<(), Error<LogoutError>> {
+
     let uri_str = format!("{}/logout", configuration.base_path);
-    let mut req_builder = configuration
-        .client
-        .request(reqwest::Method::POST, &uri_str);
+    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
@@ -97,31 +88,22 @@ pub async fn logout(
     } else {
         let content = resp.text().await?;
         let entity: Option<LogoutError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
 
 /// This only works, if no users exist yet.
-pub async fn provision(
-    configuration: &configuration::Configuration,
-    user_stub: models::UserStub,
-) -> Result<models::UserId, Error<ProvisionError>> {
+pub async fn provision(configuration: &configuration::Configuration, user_stub: models::UserStub) -> Result<models::UserId, Error<ProvisionError>> {
     // add a prefix to parameters to efficiently prevent name collisions
-    let p_user_stub = user_stub;
+    let p_body_user_stub = user_stub;
 
     let uri_str = format!("{}/provision", configuration.base_path);
-    let mut req_builder = configuration
-        .client
-        .request(reqwest::Method::POST, &uri_str);
+    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
 
     if let Some(ref user_agent) = configuration.user_agent {
         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
     }
-    req_builder = req_builder.json(&p_user_stub);
+    req_builder = req_builder.json(&p_body_user_stub);
 
     let req = req_builder.build()?;
     let resp = configuration.client.execute(req).await?;
@@ -138,24 +120,13 @@ pub async fn provision(
         let content = resp.text().await?;
         match content_type {
             ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
-            ContentType::Text => {
-                return Err(Error::from(serde_json::Error::custom(
-                    "Received `text/plain` content type response that cannot be converted to `models::UserId`",
-                )));
-            }
-            ContentType::Unsupported(unknown_type) => {
-                return Err(Error::from(serde_json::Error::custom(format!(
-                    "Received `{unknown_type}` content type response that cannot be converted to `models::UserId`"
-                ))));
-            }
+            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::UserId`"))),
+            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::UserId`")))),
         }
     } else {
         let content = resp.text().await?;
         let entity: Option<ProvisionError> = serde_json::from_str(&content).ok();
-        Err(Error::ResponseError(ResponseContent {
-            status,
-            content,
-            entity,
-        }))
+        Err(Error::ResponseError(ResponseContent { status, content, entity }))
     }
 }
+
diff --git a/crates/rocie-client/src/apis/configuration.rs b/crates/rocie-client/src/apis/configuration.rs
index d576aef..118712f 100644
--- a/crates/rocie-client/src/apis/configuration.rs
+++ b/crates/rocie-client/src/apis/configuration.rs
@@ -35,10 +35,15 @@ impl Configuration {
 
 impl Default for Configuration {
     fn default() -> Self {
-        let client = reqwest::Client::builder()
-            .cookie_store(true)
-            .build()
-            .expect("to be not missconfigured");
+        let client = {
+            let builder = reqwest::Client::builder();
+
+            // The browser handles cookies for us, so we don't need to have a storage for them.
+            #[cfg(not(any(target_arch = "wasm32", target_arch = "wasm64")))]
+            let builder = builder.cookie_store(true);
+
+            builder.build().expect("to be not missconfigured")
+        };
 
         Configuration {
             base_path: "http://localhost".to_owned(),
diff --git a/crates/rocie-client/src/apis/mod.rs b/crates/rocie-client/src/apis/mod.rs
index dd7464f..c8e4015 100644
--- a/crates/rocie-client/src/apis/mod.rs
+++ b/crates/rocie-client/src/apis/mod.rs
@@ -16,7 +16,7 @@ pub enum Error<T> {
     ResponseError(ResponseContent<T>),
 }
 
-impl<T> fmt::Display for Error<T> {
+impl <T> fmt::Display for Error<T> {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
         let (module, e) = match self {
             Error::Reqwest(e) => ("reqwest", e.to_string()),
@@ -28,7 +28,7 @@ impl<T> fmt::Display for Error<T> {
     }
 }
 
-impl<T: fmt::Debug> error::Error for Error<T> {
+impl <T: fmt::Debug> error::Error for Error<T> {
     fn source(&self) -> Option<&(dyn error::Error + 'static)> {
         Some(match self {
             Error::Reqwest(e) => e,
@@ -39,19 +39,19 @@ impl<T: fmt::Debug> error::Error for Error<T> {
     }
 }
 
-impl<T> From<reqwest::Error> for Error<T> {
+impl <T> From<reqwest::Error> for Error<T> {
     fn from(e: reqwest::Error) -> Self {
         Error::Reqwest(e)
     }
 }
 
-impl<T> From<serde_json::Error> for Error<T> {
+impl <T> From<serde_json::Error> for Error<T> {
     fn from(e: serde_json::Error) -> Self {
         Error::Serde(e)
     }
 }
 
-impl<T> From<std::io::Error> for Error<T> {
+impl <T> From<std::io::Error> for Error<T> {
     fn from(e: std::io::Error) -> Self {
         Error::Io(e)
     }
@@ -78,10 +78,8 @@ pub fn parse_deep_object(prefix: &str, value: &serde_json::Value) -> Vec<(String
                             value,
                         ));
                     }
-                }
-                serde_json::Value::String(s) => {
-                    params.push((format!("{}[{}]", prefix, key), s.clone()))
-                }
+                },
+                serde_json::Value::String(s) => params.push((format!("{}[{}]", prefix, key), s.clone())),
                 _ => params.push((format!("{}[{}]", prefix, key), value.to_string())),
             }
         }
@@ -98,7 +96,7 @@ pub fn parse_deep_object(prefix: &str, value: &serde_json::Value) -> Vec<(String
 enum ContentType {
     Json,
     Text,
-    Unsupported(String),
+    Unsupported(String)
 }
 
 impl From<&str> for ContentType {
@@ -117,13 +115,16 @@ pub mod api_get_auth_inventory_api;
 pub mod api_get_auth_product_api;
 pub mod api_get_auth_product_parent_api;
 pub mod api_get_auth_recipe_api;
+pub mod api_get_auth_recipe_parent_api;
 pub mod api_get_auth_unit_api;
 pub mod api_get_auth_unit_property_api;
 pub mod api_get_auth_user_api;
+pub mod api_get_no_auth_state_api;
 pub mod api_set_auth_barcode_api;
 pub mod api_set_auth_product_api;
 pub mod api_set_auth_product_parent_api;
 pub mod api_set_auth_recipe_api;
+pub mod api_set_auth_recipe_parent_api;
 pub mod api_set_auth_unit_api;
 pub mod api_set_auth_unit_property_api;
 pub mod api_set_auth_user_api;