bazzar/db-seed/src/products.rs

88 lines
2.8 KiB
Rust
Raw Normal View History

2022-05-08 09:47:05 +02:00
use actix::Addr;
use config::SharedAppConfig;
use database_manager::{query_db, Database};
use fake::{Fake, Faker};
use model::{ProductCategory, ProductName};
use crate::product_photos::create_product_photos;
use crate::{Result, SharedState};
async fn create_product(
db: Addr<Database>,
seed: SharedState,
name: &'static str,
category: &'static str,
) -> crate::Result<()> {
let seed = seed.clone();
let db = db.clone();
let product = query_db!(
db,
database_manager::CreateProduct {
name: ProductName::from(String::from(name)),
short_description: Faker.fake(),
long_description: Faker.fake(),
category: Some(ProductCategory::new(category)),
price: Faker.fake(),
deliver_days_flag: Faker.fake(),
},
crate::Error::DbProduct
);
seed.lock().unwrap().products.push(product);
Ok(())
}
pub(crate) async fn create_products(
db: Addr<Database>,
seed: SharedState,
config: SharedAppConfig,
) -> Result<()> {
crate::photos::create_photos(db.clone(), seed.clone(), config.clone())
.await
.unwrap();
let products = query_db!(db, database_manager::AllProducts, default vec![]);
if products.len() >= 10 {
{
seed.lock().unwrap().products = products;
}
if let Err(e) = create_product_photos(db.clone(), seed.clone(), config.clone()).await {
log::error!("{e:?}");
}
return Ok(());
}
let results = tokio::join!(
create_product(db.clone(), seed.clone(), "Nikon", "Cameras",),
create_product(db.clone(), seed.clone(), "Bonoid CBD", "Drugstore",),
create_product(db.clone(), seed.clone(), "Casio Speaker", "Speakers",),
create_product(db.clone(), seed.clone(), "Eprism Studio", "Drugstore",),
create_product(db.clone(), seed.clone(), "Best Phones 2022", "Phones",),
create_product(db.clone(), seed.clone(), "Sweet cake", "Sweets",),
create_product(db.clone(), seed.clone(), "Lexal 128G", "Memory",),
create_product(db.clone(), seed.clone(), "Fujifilm X-T10", "Cameras",),
create_product(db.clone(), seed.clone(), "Sweet Tower", "Sweets",),
create_product(db.clone(), seed.clone(), "Nikon Lenses", "Cameras",),
create_product(
db.clone(),
seed.clone(),
"Venus HD Professional",
"Drugstore",
)
);
results.0.unwrap();
results.1.unwrap();
results.2.unwrap();
results.3.unwrap();
results.4.unwrap();
results.5.unwrap();
results.6.unwrap();
results.7.unwrap();
results.8.unwrap();
results.9.unwrap();
results.10.unwrap();
create_product_photos(db.clone(), seed.clone(), config.clone()).await
}