aboutsummaryrefslogtreecommitdiffstats
path: root/crates/rocie-server/src/storage/sql/get
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-10-08 11:54:04 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-10-08 11:54:04 +0200
commit08cf86a44a9a7c513cd12cbc4a0bac7c029b9ded (patch)
tree88b202b25ec22b86f3b4df9f2022b7b23ec3cba1 /crates/rocie-server/src/storage/sql/get
parentchore(crates/rocie-client): Regenerate (diff)
downloadserver-08cf86a44a9a7c513cd12cbc4a0bac7c029b9ded.zip
feat(crates/rocie-server/unit-property): Init
Diffstat (limited to 'crates/rocie-server/src/storage/sql/get')
-rw-r--r--crates/rocie-server/src/storage/sql/get/barcode/mod.rs4
-rw-r--r--crates/rocie-server/src/storage/sql/get/mod.rs1
-rw-r--r--crates/rocie-server/src/storage/sql/get/product/mod.rs11
-rw-r--r--crates/rocie-server/src/storage/sql/get/product_amount/mod.rs5
-rw-r--r--crates/rocie-server/src/storage/sql/get/unit/mod.rs11
-rw-r--r--crates/rocie-server/src/storage/sql/get/unit_property/mod.rs117
6 files changed, 137 insertions, 12 deletions
diff --git a/crates/rocie-server/src/storage/sql/get/barcode/mod.rs b/crates/rocie-server/src/storage/sql/get/barcode/mod.rs
index 7b656b1..4eba105 100644
--- a/crates/rocie-server/src/storage/sql/get/barcode/mod.rs
+++ b/crates/rocie-server/src/storage/sql/get/barcode/mod.rs
@@ -1,8 +1,8 @@
use crate::{
app::App,
storage::sql::{
- barcode::{Barcode, BarcodeId, UnitAmount},
- unit::UnitId,
+ barcode::{Barcode, BarcodeId},
+ unit::{UnitAmount, UnitId},
},
};
diff --git a/crates/rocie-server/src/storage/sql/get/mod.rs b/crates/rocie-server/src/storage/sql/get/mod.rs
index 048cb3d..62047b8 100644
--- a/crates/rocie-server/src/storage/sql/get/mod.rs
+++ b/crates/rocie-server/src/storage/sql/get/mod.rs
@@ -1,4 +1,5 @@
pub(crate) mod product;
pub(crate) mod product_amount;
pub(crate) mod unit;
+pub(crate) mod unit_property;
pub(crate) mod barcode;
diff --git a/crates/rocie-server/src/storage/sql/get/product/mod.rs b/crates/rocie-server/src/storage/sql/get/product/mod.rs
index 541f388..01047b2 100644
--- a/crates/rocie-server/src/storage/sql/get/product/mod.rs
+++ b/crates/rocie-server/src/storage/sql/get/product/mod.rs
@@ -1,9 +1,10 @@
use crate::{
app::App,
storage::sql::{
- barcode::{Barcode, BarcodeId, UnitAmount},
+ barcode::{Barcode, BarcodeId},
product::{Product, ProductId},
- unit::UnitId,
+ unit::{UnitAmount, UnitId},
+ unit_property::UnitPropertyId,
},
};
@@ -13,7 +14,7 @@ impl Product {
pub(crate) async fn from_id(app: &App, id: ProductId) -> Result<Option<Self>, from_id::Error> {
let record = query!(
"
- SELECT name, description, parent
+ SELECT name, unit_property, description, parent
FROM products
WHERE id = ?
",
@@ -25,6 +26,7 @@ impl Product {
if let Some(record) = record {
Ok(Some(Self {
id,
+ unit_property: UnitPropertyId::from_db(&record.unit_property),
name: record.name,
description: record.description,
associated_bar_codes: vec![], // todo
@@ -37,7 +39,7 @@ impl Product {
pub(crate) async fn get_all(app: &App) -> Result<Vec<Self>, get_all::Error> {
let records = query!(
"
- SELECT id, name, description, parent
+ SELECT id, unit_property, name, description, parent
FROM products
"
)
@@ -59,6 +61,7 @@ impl Product {
all.push(Self {
id: ProductId::from_db(&record.id),
+ unit_property: UnitPropertyId::from_db(&record.unit_property),
name: record.name,
description: record.description,
associated_bar_codes: barcodes
diff --git a/crates/rocie-server/src/storage/sql/get/product_amount/mod.rs b/crates/rocie-server/src/storage/sql/get/product_amount/mod.rs
index 7700274..f82c2a0 100644
--- a/crates/rocie-server/src/storage/sql/get/product_amount/mod.rs
+++ b/crates/rocie-server/src/storage/sql/get/product_amount/mod.rs
@@ -1,8 +1,6 @@
use crate::{
app::App,
- storage::sql::{
- barcode::UnitAmount, product::ProductId, product_amount::ProductAmount, unit::UnitId,
- },
+ storage::sql::{product::ProductId, product_amount::ProductAmount, unit::{UnitAmount, UnitId}},
};
use sqlx::query;
@@ -20,6 +18,7 @@ SELECT
FROM barcodes
JOIN products ON products.id = ?
JOIN buys ON buys.barcode_id = barcodes.id
+WHERE barcodes.product_id = products.id
GROUP BY barcodes.unit;
"#,
product_id
diff --git a/crates/rocie-server/src/storage/sql/get/unit/mod.rs b/crates/rocie-server/src/storage/sql/get/unit/mod.rs
index 6c2bbcc..6f5d297 100644
--- a/crates/rocie-server/src/storage/sql/get/unit/mod.rs
+++ b/crates/rocie-server/src/storage/sql/get/unit/mod.rs
@@ -1,6 +1,9 @@
use crate::{
app::App,
- storage::sql::unit::{Unit, UnitId},
+ storage::sql::{
+ unit::{Unit, UnitId},
+ unit_property::UnitPropertyId,
+ },
};
use sqlx::query;
@@ -9,7 +12,7 @@ impl Unit {
pub(crate) async fn get_all(app: &App) -> Result<Vec<Self>, get_all::Error> {
let records = query!(
"
- SELECT id, full_name_singular, full_name_plural, short_name, description
+ SELECT id, unit_property, full_name_singular, full_name_plural, short_name, description
FROM units
"
)
@@ -20,6 +23,7 @@ impl Unit {
.into_iter()
.map(|record| Self {
id: UnitId::from_db(&record.id),
+ unit_property: UnitPropertyId::from_db(&record.unit_property),
full_name_singular: record.full_name_singular,
full_name_plural: record.full_name_plural,
short_name: record.short_name,
@@ -31,7 +35,7 @@ impl Unit {
pub(crate) async fn from_id(app: &App, id: UnitId) -> Result<Option<Self>, from_id::Error> {
let record = query!(
"
- SELECT full_name_singular, full_name_plural, short_name, description
+ SELECT full_name_singular, unit_property, full_name_plural, short_name, description
FROM units
WHERE id = ?
",
@@ -43,6 +47,7 @@ impl Unit {
if let Some(record) = record {
Ok(Some(Self {
id,
+ unit_property: UnitPropertyId::from_db(&record.unit_property),
full_name_singular: record.full_name_singular,
full_name_plural: record.full_name_plural,
short_name: record.short_name,
diff --git a/crates/rocie-server/src/storage/sql/get/unit_property/mod.rs b/crates/rocie-server/src/storage/sql/get/unit_property/mod.rs
new file mode 100644
index 0000000..be24181
--- /dev/null
+++ b/crates/rocie-server/src/storage/sql/get/unit_property/mod.rs
@@ -0,0 +1,117 @@
+use crate::{
+ app::App,
+ storage::sql::{
+ unit::UnitId,
+ unit_property::{UnitProperty, UnitPropertyId},
+ },
+};
+
+use sqlx::query;
+
+impl UnitProperty {
+ pub(crate) async fn get_all(app: &App) -> Result<Vec<Self>, get_all::Error> {
+ let records = query!(
+ "
+ SELECT id, name, description
+ FROM unit_properties
+"
+ )
+ .fetch_all(&app.db)
+ .await?;
+
+ let mut output = Vec::with_capacity(records.len());
+ for record in records {
+ let units = query!(
+ "
+ SELECT id
+ FROM units
+ WHERE units.unit_property = ?
+ ",
+ record.id
+ )
+ .fetch_all(&app.db)
+ .await?;
+
+ let units = units
+ .into_iter()
+ .map(|record| UnitId::from_db(&record.id))
+ .collect();
+
+ output.push(Self {
+ id: UnitPropertyId::from_db(&record.id),
+ units,
+ name: record.name,
+ description: record.description,
+ })
+ }
+
+ Ok(output)
+ }
+
+ pub(crate) async fn from_id(
+ app: &App,
+ id: UnitPropertyId,
+ ) -> Result<Option<Self>, from_id::Error> {
+ let record = query!(
+ "
+ SELECT name, description
+ FROM unit_properties
+ WHERE id = ?
+",
+ id
+ )
+ .fetch_optional(&app.db)
+ .await?;
+
+ if let Some(record) = record {
+ let units = query!(
+ "
+ SELECT id
+ FROM units
+ WHERE units.unit_property = ?
+ ",
+ id
+ )
+ .fetch_all(&app.db)
+ .await?;
+
+ let units = units
+ .into_iter()
+ .map(|record| UnitId::from_db(&record.id))
+ .collect();
+
+ Ok(Some(Self {
+ id,
+ units,
+ name: record.name,
+ description: record.description,
+ }))
+ } else {
+ Ok(None)
+ }
+ }
+}
+
+pub(crate) mod get_all {
+ use actix_web::ResponseError;
+
+ #[derive(thiserror::Error, Debug)]
+ pub(crate) enum Error {
+ #[error("Failed to execute the sql query")]
+ SqlError(#[from] sqlx::Error),
+ }
+
+ impl ResponseError for Error {}
+}
+
+pub(crate) mod from_id {
+ use actix_web::ResponseError;
+
+ #[derive(thiserror::Error, Debug)]
+ pub(crate) enum Error {
+ #[error("Failed to execute the sql query")]
+ SqlError(#[from] sqlx::Error),
+ }
+
+ impl ResponseError for Error {}
+}