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, 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, 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 }