diff --git a/crates/model/src/api.rs b/crates/model/src/api.rs index 51b48ef..d2843b6 100644 --- a/crates/model/src/api.rs +++ b/crates/model/src/api.rs @@ -290,30 +290,11 @@ pub struct Product { pub photos: Vec, } -pub mod v2 { - use crate::api::{Category, Photo}; - - #[derive(Debug, Hash, serde::Serialize, serde::Deserialize)] - pub struct ProductVariant { - pub id: crate::ProductVariantId, - pub product_id: crate::ProductId, - pub name: crate::ProductName, - pub short_description: crate::ProductShortDesc, - pub long_description: crate::ProductLongDesc, - pub category: Option, - pub price: crate::Price, - pub available: bool, - pub quantity_unit: crate::QuantityUnit, - pub deliver_days_flag: crate::Days, - pub photos: Vec, - } -} - impl<'path> From<( crate::Product, &mut Vec, - &mut Vec, + &mut Vec, &'path str, )> for Product { @@ -392,7 +373,7 @@ impl From<( Vec, Vec, - Vec, + Vec, String, )> for Products { @@ -566,3 +547,22 @@ pub mod admin { #[derive(Serialize, Deserialize, Debug)] pub struct LogoutResponse {} } + +pub mod v2 { + use crate::api::{Category, Photo}; + + #[derive(Debug, Hash, serde::Serialize, serde::Deserialize)] + pub struct ProductVariant { + pub id: crate::ProductVariantId, + pub product_id: crate::ProductId, + pub name: crate::ProductName, + pub short_description: crate::ProductShortDesc, + pub long_description: crate::ProductLongDesc, + pub category: Option, + pub price: crate::Price, + pub available: bool, + pub quantity_unit: crate::QuantityUnit, + pub deliver_days_flag: crate::Days, + pub photos: Vec, + } +} diff --git a/crates/web/src/model.rs b/crates/web/src/model.rs index ab6151f..fef8671 100644 --- a/crates/web/src/model.rs +++ b/crates/web/src/model.rs @@ -1,6 +1,6 @@ use std::collections::{HashMap, HashSet}; -use model::v2::ProductVariantId; +use model::v2::{DetailedProduct, ProductVariantId}; use model::ProductId; use seed::Url; @@ -75,13 +75,11 @@ impl From<::model::api::Config> for Config { pub struct Products { pub categories: Vec, pub product_ids: Vec, - pub products: HashMap, - pub product_variant_ids: Vec, - pub product_variants: HashMap, + pub products: HashMap, } impl Products { - pub fn update(&mut self, products: Vec) { + pub fn update(&mut self, products: Vec) { let len = products.len(); self.categories = products .iter() @@ -106,18 +104,13 @@ impl Products { }; } - pub fn filter_product_variant_ids(&self, filter: F) -> Vec + pub fn filter_product_ids(&self, filter: F) -> Vec where - F: Fn(&model::api::v2::ProductVariant) -> bool, + F: Fn(&DetailedProduct) -> bool, { - self.product_variant_ids + self.product_ids .iter() - .filter_map(|id| { - self.product_variants - .get(id) - .filter(|&p| filter(p)) - .map(|p| p.id) - }) + .filter_map(|id| self.products.get(id).filter(|&p| filter(p)).map(|p| p.id)) .collect() } }