Replace entire category to db
This commit is contained in:
parent
df1594e3f4
commit
6eb60f4223
@ -274,18 +274,6 @@ pub struct Category {
|
|||||||
pub svg: CategorySvg,
|
pub svg: CategorySvg,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<&crate::Category> for Category {
|
|
||||||
fn from(&crate::Category { name, key, svg }: &crate::Category) -> Self {
|
|
||||||
Self {
|
|
||||||
id: Default::default(),
|
|
||||||
parent_id: None,
|
|
||||||
name: CategoryName::from(name),
|
|
||||||
key: CategoryKey::from(key),
|
|
||||||
svg: CategorySvg::from(svg),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug, Hash)]
|
#[derive(Serialize, Deserialize, Debug, Hash)]
|
||||||
pub struct Product {
|
pub struct Product {
|
||||||
pub id: ProductId,
|
pub id: ProductId,
|
||||||
@ -305,6 +293,7 @@ impl<'path>
|
|||||||
crate::Product,
|
crate::Product,
|
||||||
&mut Vec<ProductLinkedPhoto>,
|
&mut Vec<ProductLinkedPhoto>,
|
||||||
&mut Vec<Stock>,
|
&mut Vec<Stock>,
|
||||||
|
&[crate::v2::Category],
|
||||||
&'path str,
|
&'path str,
|
||||||
)> for Product
|
)> for Product
|
||||||
{
|
{
|
||||||
@ -321,11 +310,13 @@ impl<'path>
|
|||||||
},
|
},
|
||||||
photos,
|
photos,
|
||||||
product_stocks,
|
product_stocks,
|
||||||
|
categories,
|
||||||
public_path,
|
public_path,
|
||||||
): (
|
): (
|
||||||
crate::Product,
|
crate::Product,
|
||||||
&mut Vec<ProductLinkedPhoto>,
|
&mut Vec<ProductLinkedPhoto>,
|
||||||
&mut Vec<Stock>,
|
&mut Vec<Stock>,
|
||||||
|
&[crate::v2::Category],
|
||||||
&'path str,
|
&'path str,
|
||||||
),
|
),
|
||||||
) -> Self {
|
) -> Self {
|
||||||
@ -336,12 +327,14 @@ impl<'path>
|
|||||||
.map(|idx| product_stocks.remove(idx))
|
.map(|idx| product_stocks.remove(idx))
|
||||||
.map(|stock| (**stock.quantity > 0, stock.quantity_unit))
|
.map(|stock| (**stock.quantity > 0, stock.quantity_unit))
|
||||||
.unwrap_or_else(|| (false, QuantityUnit::Piece));
|
.unwrap_or_else(|| (false, QuantityUnit::Piece));
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
id,
|
id,
|
||||||
name,
|
name,
|
||||||
short_description,
|
short_description,
|
||||||
long_description,
|
long_description,
|
||||||
category: category.and_then(CategoryMapper::api_from_product_category),
|
category: category
|
||||||
|
.and_then(|category| CategoryMapper::db_into_api(category, categories)),
|
||||||
price,
|
price,
|
||||||
available,
|
available,
|
||||||
quantity_unit,
|
quantity_unit,
|
||||||
|
@ -14,7 +14,7 @@ use serde::de::{Error, Visitor};
|
|||||||
use serde::{Deserialize, Deserializer, Serialize};
|
use serde::{Deserialize, Deserializer, Serialize};
|
||||||
|
|
||||||
pub use crate::encrypt::*;
|
pub use crate::encrypt::*;
|
||||||
use crate::v2::{CategoryKey, CategoryName, CategorySvg, ProductVariantId};
|
use crate::v2::ProductVariantId;
|
||||||
|
|
||||||
#[derive(Debug, Hash, thiserror::Error)]
|
#[derive(Debug, Hash, thiserror::Error)]
|
||||||
pub enum TransformError {
|
pub enum TransformError {
|
||||||
@ -28,43 +28,6 @@ pub enum TransformError {
|
|||||||
|
|
||||||
pub type RecordId = i32;
|
pub type RecordId = i32;
|
||||||
|
|
||||||
#[derive(Clone, Debug, Hash, Deserialize, Serialize)]
|
|
||||||
#[serde(rename_all = "snake_case")]
|
|
||||||
pub struct Category {
|
|
||||||
pub name: &'static str,
|
|
||||||
pub key: &'static str,
|
|
||||||
pub svg: &'static str,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Category {
|
|
||||||
pub const CAMERAS_NAME: &'static str = "Cameras";
|
|
||||||
pub const CAMERAS_KEY: &'static str = "cameras";
|
|
||||||
|
|
||||||
pub const DRUGSTORE_NAME: &'static str = "Drugstore";
|
|
||||||
pub const DRUGSTORE_KEY: &'static str = "drugstore";
|
|
||||||
|
|
||||||
pub const SPEAKERS_NAME: &'static str = "Speakers";
|
|
||||||
pub const SPEAKERS_KEY: &'static str = "speakers";
|
|
||||||
|
|
||||||
pub const PHONES_NAME: &'static str = "Phones";
|
|
||||||
pub const PHONES_KEY: &'static str = "phones";
|
|
||||||
|
|
||||||
pub const SWEETS_NAME: &'static str = "Sweets";
|
|
||||||
pub const SWEETS_KEY: &'static str = "sweets";
|
|
||||||
|
|
||||||
pub const MEMORY_NAME: &'static str = "Memory";
|
|
||||||
pub const MEMORY_KEY: &'static str = "memory";
|
|
||||||
|
|
||||||
pub const PANTS_NAME: &'static str = "Pants";
|
|
||||||
pub const PANTS_KEY: &'static str = "pants";
|
|
||||||
|
|
||||||
pub const CLOTHES_NAME: &'static str = "Clothes";
|
|
||||||
pub const CLOTHES_KEY: &'static str = "clothes";
|
|
||||||
|
|
||||||
pub const PLATES_NAME: &'static str = "Plates";
|
|
||||||
pub const PLATES_KEY: &'static str = "plates";
|
|
||||||
}
|
|
||||||
|
|
||||||
macro_rules! category_svg {
|
macro_rules! category_svg {
|
||||||
($name: expr) => {
|
($name: expr) => {
|
||||||
concat!("/svg/", $name, ".svg")
|
concat!("/svg/", $name, ".svg")
|
||||||
@ -74,67 +37,6 @@ macro_rules! category_svg {
|
|||||||
pub struct CategoryMapper;
|
pub struct CategoryMapper;
|
||||||
|
|
||||||
impl CategoryMapper {
|
impl CategoryMapper {
|
||||||
pub const CATEGORIES: [Category; 9] = [
|
|
||||||
Category {
|
|
||||||
name: Category::CAMERAS_NAME,
|
|
||||||
key: Category::CAMERAS_KEY,
|
|
||||||
svg: category_svg!("cameras"),
|
|
||||||
},
|
|
||||||
Category {
|
|
||||||
name: Category::DRUGSTORE_NAME,
|
|
||||||
key: Category::DRUGSTORE_KEY,
|
|
||||||
svg: category_svg!("drugstore"),
|
|
||||||
},
|
|
||||||
Category {
|
|
||||||
name: Category::SPEAKERS_NAME,
|
|
||||||
key: Category::SPEAKERS_KEY,
|
|
||||||
svg: category_svg!("speakers"),
|
|
||||||
},
|
|
||||||
Category {
|
|
||||||
name: Category::PHONES_NAME,
|
|
||||||
key: Category::PHONES_KEY,
|
|
||||||
svg: category_svg!("phones"),
|
|
||||||
},
|
|
||||||
Category {
|
|
||||||
name: Category::SWEETS_NAME,
|
|
||||||
key: Category::SWEETS_KEY,
|
|
||||||
svg: category_svg!("sweets"),
|
|
||||||
},
|
|
||||||
Category {
|
|
||||||
name: Category::MEMORY_NAME,
|
|
||||||
key: Category::MEMORY_KEY,
|
|
||||||
svg: category_svg!("memory"),
|
|
||||||
},
|
|
||||||
Category {
|
|
||||||
name: Category::PANTS_NAME,
|
|
||||||
key: Category::PANTS_KEY,
|
|
||||||
svg: category_svg!("pants"),
|
|
||||||
},
|
|
||||||
Category {
|
|
||||||
name: Category::CLOTHES_NAME,
|
|
||||||
key: Category::CLOTHES_KEY,
|
|
||||||
svg: category_svg!("clothes"),
|
|
||||||
},
|
|
||||||
Category {
|
|
||||||
name: Category::PLATES_NAME,
|
|
||||||
key: Category::PLATES_KEY,
|
|
||||||
svg: category_svg!("plates"),
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
pub fn api_from_product_category(name: ProductCategory) -> Option<crate::api::Category> {
|
|
||||||
Self::CATEGORIES
|
|
||||||
.iter()
|
|
||||||
.find(|category| category.name == name.as_str())
|
|
||||||
.map(|&Category { name, key, svg }| crate::api::Category {
|
|
||||||
id: Default::default(),
|
|
||||||
parent_id: None,
|
|
||||||
name: CategoryName::from(name),
|
|
||||||
key: CategoryKey::from(key),
|
|
||||||
svg: CategorySvg::from(svg),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn db_into_api(
|
pub fn db_into_api(
|
||||||
name: ProductCategory,
|
name: ProductCategory,
|
||||||
categories: &[crate::v2::Category],
|
categories: &[crate::v2::Category],
|
||||||
|
@ -6,7 +6,7 @@ use model::v2::*;
|
|||||||
use model::CategoryMapper;
|
use model::CategoryMapper;
|
||||||
|
|
||||||
use crate::begin_t;
|
use crate::begin_t;
|
||||||
use crate::db::Database;
|
use crate::db::{AllCategories, Database};
|
||||||
|
|
||||||
pub async fn create_product(
|
pub async fn create_product(
|
||||||
input: create_product::Input,
|
input: create_product::Input,
|
||||||
@ -72,6 +72,18 @@ async fn inner_create_product(
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let dbm = AllCategories {
|
||||||
|
limit: Limit::from_u32(2000),
|
||||||
|
offset: Offset::from_u32(0),
|
||||||
|
};
|
||||||
|
let categories = match dbm.run(&mut *t).await {
|
||||||
|
Ok(categories) => categories,
|
||||||
|
Err(e) => {
|
||||||
|
tracing::warn!("{}", e);
|
||||||
|
return Err(Error::AllCategories);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
let dbm = crate::db::CreateStock {
|
let dbm = crate::db::CreateStock {
|
||||||
product_variant_id: variant.id,
|
product_variant_id: variant.id,
|
||||||
quantity: input.stock.quantity,
|
quantity: input.stock.quantity,
|
||||||
@ -91,7 +103,7 @@ async fn inner_create_product(
|
|||||||
name: product.name,
|
name: product.name,
|
||||||
category: product
|
category: product
|
||||||
.category
|
.category
|
||||||
.and_then(CategoryMapper::api_from_product_category),
|
.and_then(|category| CategoryMapper::db_into_api(category, &categories)),
|
||||||
deliver_days_flag: product.deliver_days_flag,
|
deliver_days_flag: product.deliver_days_flag,
|
||||||
variants: vec![DetailedProductVariant {
|
variants: vec![DetailedProductVariant {
|
||||||
id: variant.id,
|
id: variant.id,
|
||||||
|
Loading…
Reference in New Issue
Block a user