feat: OrderingServices constructor
This commit is contained in:
parent
bf2b3c3440
commit
b786bdd3ee
1 changed files with 295 additions and 51 deletions
|
@ -1,6 +1,7 @@
|
|||
// SPDX-FileCopyrightText: 2024 Aravinth Manivannan <realaravinth@batsense.net>
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
use std::sync::Arc;
|
||||
|
||||
use derive_builder::Builder;
|
||||
use mockall::predicate::*;
|
||||
|
@ -27,105 +28,348 @@ pub mod update_order_service;
|
|||
pub mod update_product_service;
|
||||
pub mod update_store_service;
|
||||
|
||||
use add_category_service::*;
|
||||
use add_customization_service::*;
|
||||
use add_kot_service::*;
|
||||
use add_line_item_service::*;
|
||||
use add_order_service::*;
|
||||
use add_product_service::*;
|
||||
use add_store_service::*;
|
||||
use delete_kot_service::*;
|
||||
use delete_line_item_service::*;
|
||||
use delete_order_service::*;
|
||||
use update_category_service::*;
|
||||
use update_customization_service::*;
|
||||
use update_kot_service::*;
|
||||
use update_line_item_service::*;
|
||||
use update_order_service::*;
|
||||
use update_product_service::*;
|
||||
use update_store_service::*;
|
||||
|
||||
use super::port::output::{
|
||||
db::{
|
||||
category_id_exists::*, category_name_exists_for_store::*, customization_id_exists::*,
|
||||
customization_name_exists_for_product::*, get_category::*, kot_id_exists::*,
|
||||
line_item_id_exists::*, order_id_exists::*, product_id_exists::*,
|
||||
product_name_exists_for_category::*, store_id_exists::*, store_name_exists::*,
|
||||
},
|
||||
full_text_search::add_product_to_store::*,
|
||||
};
|
||||
|
||||
#[automock]
|
||||
pub trait OrderingServicesInterface: Send + Sync {
|
||||
fn add_line_item(&self) -> add_line_item_service::AddLineItemServiceObj;
|
||||
fn update_line_item(&self) -> update_line_item_service::UpdateLineItemServiceObj;
|
||||
fn delete_line_item(&self) -> delete_line_item_service::DeleteLineItemServiceObj;
|
||||
fn add_order(&self) -> add_order_service::AddOrderServiceObj;
|
||||
fn update_order(&self) -> update_order_service::UpdateOrderServiceObj;
|
||||
fn delete_order(&self) -> delete_order_service::DeleteOrderServiceObj;
|
||||
fn add_kot(&self) -> add_kot_service::AddKotServiceObj;
|
||||
fn update_kot(&self) -> update_kot_service::UpdateKotServiceObj;
|
||||
fn delete_kot(&self) -> delete_kot_service::DeleteKotServiceObj;
|
||||
fn add_store(&self) -> add_store_service::AddStoreServiceObj;
|
||||
fn update_store(&self) -> update_store_service::UpdateStoreServiceObj;
|
||||
fn add_category(&self) -> add_category_service::AddCategoryServiceObj;
|
||||
fn update_category(&self) -> update_category_service::UpdateCategoryServiceObj;
|
||||
fn add_product(&self) -> add_product_service::AddProductServiceObj;
|
||||
fn update_product(&self) -> update_product_service::UpdateProductServiceObj;
|
||||
fn add_customization(&self) -> add_customization_service::AddCustomizationServiceObj;
|
||||
fn update_customization(&self) -> update_customization_service::UpdateCustomizationServiceObj;
|
||||
fn add_line_item(&self) -> AddLineItemServiceObj;
|
||||
fn update_line_item(&self) -> UpdateLineItemServiceObj;
|
||||
fn delete_line_item(&self) -> DeleteLineItemServiceObj;
|
||||
fn add_order(&self) -> AddOrderServiceObj;
|
||||
fn update_order(&self) -> UpdateOrderServiceObj;
|
||||
fn delete_order(&self) -> DeleteOrderServiceObj;
|
||||
fn add_kot(&self) -> AddKotServiceObj;
|
||||
fn update_kot(&self) -> UpdateKotServiceObj;
|
||||
fn delete_kot(&self) -> DeleteKotServiceObj;
|
||||
fn add_store(&self) -> AddStoreServiceObj;
|
||||
fn update_store(&self) -> UpdateStoreServiceObj;
|
||||
fn add_category(&self) -> AddCategoryServiceObj;
|
||||
fn update_category(&self) -> UpdateCategoryServiceObj;
|
||||
fn add_product(&self) -> AddProductServiceObj;
|
||||
fn update_product(&self) -> UpdateProductServiceObj;
|
||||
fn add_customization(&self) -> AddCustomizationServiceObj;
|
||||
fn update_customization(&self) -> UpdateCustomizationServiceObj;
|
||||
}
|
||||
|
||||
#[derive(Clone, Builder)]
|
||||
pub struct OrderingServices {
|
||||
add_line_item: add_line_item_service::AddLineItemServiceObj,
|
||||
update_line_item: update_line_item_service::UpdateLineItemServiceObj,
|
||||
delete_line_item: delete_line_item_service::DeleteLineItemServiceObj,
|
||||
add_order: add_order_service::AddOrderServiceObj,
|
||||
update_order: update_order_service::UpdateOrderServiceObj,
|
||||
delete_order: delete_order_service::DeleteOrderServiceObj,
|
||||
add_kot: add_kot_service::AddKotServiceObj,
|
||||
update_kot: update_kot_service::UpdateKotServiceObj,
|
||||
delete_kot: delete_kot_service::DeleteKotServiceObj,
|
||||
add_store: add_store_service::AddStoreServiceObj,
|
||||
update_store: update_store_service::UpdateStoreServiceObj,
|
||||
add_category: add_category_service::AddCategoryServiceObj,
|
||||
update_category: update_category_service::UpdateCategoryServiceObj,
|
||||
add_product: add_product_service::AddProductServiceObj,
|
||||
update_product: update_product_service::UpdateProductServiceObj,
|
||||
add_customization: add_customization_service::AddCustomizationServiceObj,
|
||||
update_customization: update_customization_service::UpdateCustomizationServiceObj,
|
||||
add_line_item: AddLineItemServiceObj,
|
||||
update_line_item: UpdateLineItemServiceObj,
|
||||
delete_line_item: DeleteLineItemServiceObj,
|
||||
add_order: AddOrderServiceObj,
|
||||
update_order: UpdateOrderServiceObj,
|
||||
delete_order: DeleteOrderServiceObj,
|
||||
add_kot: AddKotServiceObj,
|
||||
update_kot: UpdateKotServiceObj,
|
||||
delete_kot: DeleteKotServiceObj,
|
||||
add_store: AddStoreServiceObj,
|
||||
update_store: UpdateStoreServiceObj,
|
||||
add_category: AddCategoryServiceObj,
|
||||
update_category: UpdateCategoryServiceObj,
|
||||
add_product: AddProductServiceObj,
|
||||
update_product: UpdateProductServiceObj,
|
||||
add_customization: AddCustomizationServiceObj,
|
||||
update_customization: UpdateCustomizationServiceObj,
|
||||
}
|
||||
|
||||
impl OrderingServicesInterface for OrderingServices {
|
||||
fn add_line_item(&self) -> add_line_item_service::AddLineItemServiceObj {
|
||||
fn add_line_item(&self) -> AddLineItemServiceObj {
|
||||
self.add_line_item.clone()
|
||||
}
|
||||
fn update_line_item(&self) -> update_line_item_service::UpdateLineItemServiceObj {
|
||||
fn update_line_item(&self) -> UpdateLineItemServiceObj {
|
||||
self.update_line_item.clone()
|
||||
}
|
||||
|
||||
fn delete_line_item(&self) -> delete_line_item_service::DeleteLineItemServiceObj {
|
||||
fn delete_line_item(&self) -> DeleteLineItemServiceObj {
|
||||
self.delete_line_item.clone()
|
||||
}
|
||||
|
||||
fn add_order(&self) -> add_order_service::AddOrderServiceObj {
|
||||
fn add_order(&self) -> AddOrderServiceObj {
|
||||
self.add_order.clone()
|
||||
}
|
||||
|
||||
fn update_order(&self) -> update_order_service::UpdateOrderServiceObj {
|
||||
fn update_order(&self) -> UpdateOrderServiceObj {
|
||||
self.update_order.clone()
|
||||
}
|
||||
|
||||
fn delete_order(&self) -> delete_order_service::DeleteOrderServiceObj {
|
||||
fn delete_order(&self) -> DeleteOrderServiceObj {
|
||||
self.delete_order.clone()
|
||||
}
|
||||
|
||||
fn add_kot(&self) -> add_kot_service::AddKotServiceObj {
|
||||
fn add_kot(&self) -> AddKotServiceObj {
|
||||
self.add_kot.clone()
|
||||
}
|
||||
|
||||
fn update_kot(&self) -> update_kot_service::UpdateKotServiceObj {
|
||||
fn update_kot(&self) -> UpdateKotServiceObj {
|
||||
self.update_kot.clone()
|
||||
}
|
||||
|
||||
fn delete_kot(&self) -> delete_kot_service::DeleteKotServiceObj {
|
||||
fn delete_kot(&self) -> DeleteKotServiceObj {
|
||||
self.delete_kot.clone()
|
||||
}
|
||||
fn add_store(&self) -> add_store_service::AddStoreServiceObj {
|
||||
fn add_store(&self) -> AddStoreServiceObj {
|
||||
self.add_store.clone()
|
||||
}
|
||||
fn update_store(&self) -> update_store_service::UpdateStoreServiceObj {
|
||||
fn update_store(&self) -> UpdateStoreServiceObj {
|
||||
self.update_store.clone()
|
||||
}
|
||||
fn add_category(&self) -> add_category_service::AddCategoryServiceObj {
|
||||
fn add_category(&self) -> AddCategoryServiceObj {
|
||||
self.add_category.clone()
|
||||
}
|
||||
fn update_category(&self) -> update_category_service::UpdateCategoryServiceObj {
|
||||
fn update_category(&self) -> UpdateCategoryServiceObj {
|
||||
self.update_category.clone()
|
||||
}
|
||||
fn add_product(&self) -> add_product_service::AddProductServiceObj {
|
||||
fn add_product(&self) -> AddProductServiceObj {
|
||||
self.add_product.clone()
|
||||
}
|
||||
fn update_product(&self) -> update_product_service::UpdateProductServiceObj {
|
||||
fn update_product(&self) -> UpdateProductServiceObj {
|
||||
self.update_product.clone()
|
||||
}
|
||||
fn add_customization(&self) -> add_customization_service::AddCustomizationServiceObj {
|
||||
fn add_customization(&self) -> AddCustomizationServiceObj {
|
||||
self.add_customization.clone()
|
||||
}
|
||||
fn update_customization(&self) -> update_customization_service::UpdateCustomizationServiceObj {
|
||||
fn update_customization(&self) -> UpdateCustomizationServiceObj {
|
||||
self.update_customization.clone()
|
||||
}
|
||||
}
|
||||
|
||||
pub type OrderingServicesInterfaceObj = Arc<dyn OrderingServicesInterface>;
|
||||
|
||||
impl OrderingServices {
|
||||
pub fn new(
|
||||
out_db_category_id_exists: CategoryIDExistsDBPortObj,
|
||||
out_db_category_name_exists_for_store: CategoryNameExistsForStoreDBPortObj,
|
||||
out_db_customization_id_exists: CustomizationIDExistsDBPortObj,
|
||||
out_db_customization_name_exists_for_product: CustomizationNameExistsForProductDBPortObj,
|
||||
out_db_get_category: GetCategoryDBPortObj,
|
||||
|
||||
out_db_kot_id_exists: KotIDExistsDBPortObj,
|
||||
out_db_line_item_id_exists: LineItemIDExistsDBPortObj,
|
||||
out_db_order_id_exists: OrderIDExistsDBPortObj,
|
||||
|
||||
out_db_product_id_exists: ProductIDExistsDBPortObj,
|
||||
out_db_product_name_exists_for_category: ProductNameExistsForCategoryDBPortObj,
|
||||
out_db_store_id_exists: StoreIDExistsDBPortObj,
|
||||
out_db_store_name_exists: StoreNameExistsDBPortObj,
|
||||
|
||||
out_fts_add_product_to_store: AddProductToStoreFTSPortObj,
|
||||
) -> OrderingServicesInterfaceObj {
|
||||
let add_line_item = Arc::new(
|
||||
AddLineItemServiceBuilder::default()
|
||||
.db_line_item_id_exists(out_db_line_item_id_exists.clone())
|
||||
.db_kot_id_exists(out_db_kot_id_exists.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let update_line_item = Arc::new(
|
||||
UpdateLineItemServiceBuilder::default()
|
||||
.db_line_item_id_exists(out_db_line_item_id_exists.clone())
|
||||
.db_kot_id_exists(out_db_kot_id_exists.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
let delete_line_item = Arc::new(
|
||||
DeleteLineItemServiceBuilder::default()
|
||||
.db_line_item_id_exists(out_db_line_item_id_exists.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let add_order = Arc::new(
|
||||
AddOrderServiceBuilder::default()
|
||||
.db_store_id_exists(out_db_store_id_exists.clone())
|
||||
.db_order_id_exists(out_db_order_id_exists.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
let update_order = Arc::new(
|
||||
UpdateOrderServiceBuilder::default()
|
||||
.db_order_id_exists(out_db_order_id_exists.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let delete_order = Arc::new(
|
||||
DeleteOrderServiceBuilder::default()
|
||||
.db_order_id_exists(out_db_order_id_exists.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let add_kot = Arc::new(
|
||||
AddKotServiceBuilder::default()
|
||||
.db_order_id_exists(out_db_order_id_exists.clone())
|
||||
.db_kot_id_exists(out_db_kot_id_exists.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let update_kot = Arc::new(
|
||||
UpdateKotServiceBuilder::default()
|
||||
.db_order_id_exists(out_db_order_id_exists.clone())
|
||||
.db_kot_id_exists(out_db_kot_id_exists.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let delete_kot = Arc::new(
|
||||
DeleteKotServiceBuilder::default()
|
||||
.db_kot_id_exists(out_db_kot_id_exists.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let add_store = Arc::new(
|
||||
AddStoreServiceBuilder::default()
|
||||
.db_store_id_exists(out_db_store_id_exists.clone())
|
||||
.db_store_name_exists(out_db_store_name_exists.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let add_category = Arc::new(
|
||||
AddCategoryServiceBuilder::default()
|
||||
.db_store_id_exists(out_db_store_id_exists.clone())
|
||||
.db_category_name_exists_for_store(out_db_category_name_exists_for_store.clone())
|
||||
.db_category_id_exists(out_db_category_id_exists.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let add_product = Arc::new(
|
||||
AddProductServiceBuilder::default()
|
||||
.db_category_id_exists(out_db_category_id_exists.clone())
|
||||
.db_product_name_exists_for_category(
|
||||
out_db_product_name_exists_for_category.clone(),
|
||||
)
|
||||
.db_product_id_exists(out_db_product_id_exists.clone())
|
||||
.db_get_category(out_db_get_category.clone())
|
||||
.fts_add_product(out_fts_add_product_to_store.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let add_customization = Arc::new(
|
||||
AddCustomizationServiceBuilder::default()
|
||||
.db_product_id_exists(out_db_product_id_exists.clone())
|
||||
.db_customization_id_exists(out_db_customization_id_exists.clone())
|
||||
.db_customization_name_exists_for_product(
|
||||
out_db_customization_name_exists_for_product.clone(),
|
||||
)
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let update_product = Arc::new(
|
||||
UpdateProductServiceBuilder::default()
|
||||
.db_category_id_exists(out_db_category_id_exists.clone())
|
||||
.db_product_name_exists_for_category(
|
||||
out_db_product_name_exists_for_category.clone(),
|
||||
)
|
||||
.db_product_id_exists(out_db_product_id_exists.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let update_customization = Arc::new(
|
||||
UpdateCustomizationServiceBuilder::default()
|
||||
.db_product_id_exists(out_db_product_id_exists.clone())
|
||||
.db_customization_id_exists(out_db_customization_id_exists.clone())
|
||||
.db_customization_name_exists_for_product(
|
||||
out_db_customization_name_exists_for_product.clone(),
|
||||
)
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let update_category = Arc::new(
|
||||
UpdateCategoryServiceBuilder::default()
|
||||
.db_store_id_exists(out_db_store_id_exists.clone())
|
||||
.db_category_name_exists_for_store(out_db_category_name_exists_for_store.clone())
|
||||
.db_category_id_exists(out_db_category_id_exists.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let update_store = Arc::new(
|
||||
UpdateStoreServiceBuilder::default()
|
||||
.db_store_id_exists(out_db_store_id_exists.clone())
|
||||
.db_store_name_exists(out_db_store_name_exists.clone())
|
||||
.build()
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
Arc::new(Self {
|
||||
add_line_item,
|
||||
update_line_item,
|
||||
delete_line_item,
|
||||
add_order,
|
||||
update_order,
|
||||
delete_order,
|
||||
add_kot,
|
||||
update_kot,
|
||||
delete_kot,
|
||||
add_store,
|
||||
update_store,
|
||||
add_category,
|
||||
update_category,
|
||||
add_product,
|
||||
update_product,
|
||||
add_customization,
|
||||
update_customization,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::tests::bdd::IS_NEVER_CALLED;
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn ordering_services_work() {
|
||||
let s = OrderingServices::new(
|
||||
mock_category_id_exists_db_port_true(IS_NEVER_CALLED),
|
||||
mock_category_name_exists_for_store_db_port_true(IS_NEVER_CALLED),
|
||||
mock_customization_id_exists_db_port_true(IS_NEVER_CALLED),
|
||||
mock_customization_name_exists_for_product_db_port_true(IS_NEVER_CALLED),
|
||||
mock_get_category_db_port(IS_NEVER_CALLED),
|
||||
mock_kot_id_exists_db_port_true(IS_NEVER_CALLED),
|
||||
mock_line_item_id_exists_db_port_true(IS_NEVER_CALLED),
|
||||
mock_order_id_exists_db_port_true(IS_NEVER_CALLED),
|
||||
mock_product_id_exists_db_port_true(IS_NEVER_CALLED),
|
||||
mock_product_name_exists_for_category_db_port_true(IS_NEVER_CALLED),
|
||||
mock_store_id_exists_db_port_true(IS_NEVER_CALLED),
|
||||
mock_store_name_exists_db_port_true(IS_NEVER_CALLED),
|
||||
mock_add_product_to_store_fts_port(IS_NEVER_CALLED),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue