#![recursion_limit = "1024"]
#![allow(unused_imports)]
pub mod domain;
pub mod infrastructure;
pub mod application;
pub mod presentation;
pub mod seeders;
pub mod exports;
pub use domain::entity::*;
pub use infrastructure::persistence::*;
pub use application::service::PickingBatchService;
pub use application::service::DeliveryNoteService;
pub use application::service::DeliveryNoteItemService;
pub use application::service::InventoryCompanySettingService;
pub use application::service::LandedCostService;
pub use application::service::LandedCostLineService;
pub use application::service::LandedCostAdjustmentLineService;
pub use application::service::LocationService;
pub use application::service::StockMoveService;
pub use application::service::StockMoveLineService;
pub use application::service::OperationTypeService;
pub use application::service::TransferService;
pub use application::service::RouteService;
pub use application::service::RouteRuleService;
pub use application::service::ReorderingRuleService;
pub use application::service::PurchaseReceiptService;
pub use application::service::PurchaseReceiptItemService;
pub use application::service::QuantService;
pub use application::service::ScrapService;
pub use application::service::ScrapReasonTagService;
pub use application::service::StockEntryService;
pub use application::service::StockEntryItemService;
pub use application::service::StockLedgerEntryService;
pub use application::service::BinService;
pub use application::service::StockReconciliationService;
pub use application::service::StockReconciliationItemService;
pub use application::service::PackageTypeService;
pub use application::service::StorageCategoryService;
pub use application::service::StorageCategoryCapacityService;
pub use application::service::PutawayRuleService;
pub use application::service::LotService;
pub use application::service::PackageService;
pub use application::service::WarehouseService;
pub use application::service::StockItemService;
use std::sync::Arc;
use axum::Router;
use sqlx::PgPool;
pub struct InventoryModule {
pub(crate) picking_batch_service: Arc<PickingBatchService>,
pub(crate) delivery_note_service: Arc<DeliveryNoteService>,
pub(crate) delivery_note_item_service: Arc<DeliveryNoteItemService>,
pub(crate) inventory_company_setting_service: Arc<InventoryCompanySettingService>,
pub(crate) landed_cost_service: Arc<LandedCostService>,
pub(crate) landed_cost_line_service: Arc<LandedCostLineService>,
pub(crate) landed_cost_adjustment_line_service: Arc<LandedCostAdjustmentLineService>,
pub(crate) location_service: Arc<LocationService>,
pub(crate) stock_move_service: Arc<StockMoveService>,
pub(crate) stock_move_line_service: Arc<StockMoveLineService>,
pub(crate) operation_type_service: Arc<OperationTypeService>,
pub(crate) transfer_service: Arc<TransferService>,
pub(crate) route_service: Arc<RouteService>,
pub(crate) route_rule_service: Arc<RouteRuleService>,
pub(crate) reordering_rule_service: Arc<ReorderingRuleService>,
pub(crate) purchase_receipt_service: Arc<PurchaseReceiptService>,
pub(crate) purchase_receipt_item_service: Arc<PurchaseReceiptItemService>,
pub(crate) quant_service: Arc<QuantService>,
pub(crate) scrap_service: Arc<ScrapService>,
pub(crate) scrap_reason_tag_service: Arc<ScrapReasonTagService>,
pub(crate) stock_entry_service: Arc<StockEntryService>,
pub(crate) stock_entry_item_service: Arc<StockEntryItemService>,
pub(crate) stock_ledger_entry_service: Arc<StockLedgerEntryService>,
pub(crate) bin_service: Arc<BinService>,
pub(crate) stock_reconciliation_service: Arc<StockReconciliationService>,
pub(crate) stock_reconciliation_item_service: Arc<StockReconciliationItemService>,
pub(crate) package_type_service: Arc<PackageTypeService>,
pub(crate) storage_category_service: Arc<StorageCategoryService>,
pub(crate) storage_category_capacity_service: Arc<StorageCategoryCapacityService>,
pub(crate) putaway_rule_service: Arc<PutawayRuleService>,
pub(crate) lot_service: Arc<LotService>,
pub(crate) package_service: Arc<PackageService>,
pub(crate) warehouse_service: Arc<WarehouseService>,
pub(crate) stock_item_service: Arc<StockItemService>,
}
impl InventoryModule {
pub fn builder() -> InventoryModuleBuilder {
InventoryModuleBuilder::new()
}
pub fn all_crud_routes(&self) -> Router {
use presentation::http::{
create_picking_batch_read_routes,
create_delivery_note_read_routes,
create_delivery_note_item_read_routes,
create_inventory_company_setting_routes,
create_landed_cost_read_routes,
create_landed_cost_line_read_routes,
create_landed_cost_adjustment_line_read_routes,
create_location_routes,
create_stock_move_read_routes,
create_stock_move_line_read_routes,
create_operation_type_routes,
create_transfer_read_routes,
create_route_routes,
create_route_rule_routes,
create_reordering_rule_routes,
create_purchase_receipt_read_routes,
create_purchase_receipt_item_read_routes,
create_quant_read_routes,
create_scrap_read_routes,
create_scrap_reason_tag_routes,
create_stock_entry_read_routes,
create_stock_entry_item_read_routes,
create_stock_ledger_entry_read_routes,
create_bin_read_routes,
create_stock_reconciliation_read_routes,
create_stock_reconciliation_item_read_routes,
create_package_type_routes,
create_storage_category_routes,
create_storage_category_capacity_routes,
create_putaway_rule_routes,
create_lot_routes,
create_package_routes,
create_warehouse_routes,
create_stock_item_routes,
};
Router::new()
.merge(create_picking_batch_read_routes(self.picking_batch_service.clone()))
.merge(create_delivery_note_read_routes(self.delivery_note_service.clone()))
.merge(create_delivery_note_item_read_routes(self.delivery_note_item_service.clone()))
.merge(create_inventory_company_setting_routes(self.inventory_company_setting_service.clone()))
.merge(create_landed_cost_read_routes(self.landed_cost_service.clone()))
.merge(create_landed_cost_line_read_routes(self.landed_cost_line_service.clone()))
.merge(create_landed_cost_adjustment_line_read_routes(self.landed_cost_adjustment_line_service.clone()))
.merge(create_location_routes(self.location_service.clone()))
.merge(create_stock_move_read_routes(self.stock_move_service.clone()))
.merge(create_stock_move_line_read_routes(self.stock_move_line_service.clone()))
.merge(create_operation_type_routes(self.operation_type_service.clone()))
.merge(create_transfer_read_routes(self.transfer_service.clone()))
.merge(create_route_routes(self.route_service.clone()))
.merge(create_route_rule_routes(self.route_rule_service.clone()))
.merge(create_reordering_rule_routes(self.reordering_rule_service.clone()))
.merge(create_purchase_receipt_read_routes(self.purchase_receipt_service.clone()))
.merge(create_purchase_receipt_item_read_routes(self.purchase_receipt_item_service.clone()))
.merge(create_quant_read_routes(self.quant_service.clone()))
.merge(create_scrap_read_routes(self.scrap_service.clone()))
.merge(create_scrap_reason_tag_routes(self.scrap_reason_tag_service.clone()))
.merge(create_stock_entry_read_routes(self.stock_entry_service.clone()))
.merge(create_stock_entry_item_read_routes(self.stock_entry_item_service.clone()))
.merge(create_stock_ledger_entry_read_routes(self.stock_ledger_entry_service.clone()))
.merge(create_bin_read_routes(self.bin_service.clone()))
.merge(create_stock_reconciliation_read_routes(self.stock_reconciliation_service.clone()))
.merge(create_stock_reconciliation_item_read_routes(self.stock_reconciliation_item_service.clone()))
.merge(create_package_type_routes(self.package_type_service.clone()))
.merge(create_storage_category_routes(self.storage_category_service.clone()))
.merge(create_storage_category_capacity_routes(self.storage_category_capacity_service.clone()))
.merge(create_putaway_rule_routes(self.putaway_rule_service.clone()))
.merge(create_lot_routes(self.lot_service.clone()))
.merge(create_package_routes(self.package_service.clone()))
.merge(create_warehouse_routes(self.warehouse_service.clone()))
.merge(create_stock_item_routes(self.stock_item_service.clone()))
}
#[deprecated(note = "mounts unvalidated generic CRUD; prefer readonly_routes() + validated writes, or all_crud_routes() for the full/unguarded surface")]
pub fn routes(&self) -> Router {
self.all_crud_routes()
}
pub fn readonly_routes(&self) -> Router {
use presentation::http::{
create_picking_batch_read_routes,
create_delivery_note_read_routes,
create_delivery_note_item_read_routes,
create_inventory_company_setting_read_routes,
create_landed_cost_read_routes,
create_landed_cost_line_read_routes,
create_landed_cost_adjustment_line_read_routes,
create_location_read_routes,
create_stock_move_read_routes,
create_stock_move_line_read_routes,
create_operation_type_read_routes,
create_transfer_read_routes,
create_route_read_routes,
create_route_rule_read_routes,
create_reordering_rule_read_routes,
create_purchase_receipt_read_routes,
create_purchase_receipt_item_read_routes,
create_quant_read_routes,
create_scrap_read_routes,
create_scrap_reason_tag_read_routes,
create_stock_entry_read_routes,
create_stock_entry_item_read_routes,
create_stock_ledger_entry_read_routes,
create_bin_read_routes,
create_stock_reconciliation_read_routes,
create_stock_reconciliation_item_read_routes,
create_package_type_read_routes,
create_storage_category_read_routes,
create_storage_category_capacity_read_routes,
create_putaway_rule_read_routes,
create_lot_read_routes,
create_package_read_routes,
create_warehouse_read_routes,
create_stock_item_read_routes,
};
Router::new()
.merge(create_picking_batch_read_routes(self.picking_batch_service.clone()))
.merge(create_delivery_note_read_routes(self.delivery_note_service.clone()))
.merge(create_delivery_note_item_read_routes(self.delivery_note_item_service.clone()))
.merge(create_inventory_company_setting_read_routes(self.inventory_company_setting_service.clone()))
.merge(create_landed_cost_read_routes(self.landed_cost_service.clone()))
.merge(create_landed_cost_line_read_routes(self.landed_cost_line_service.clone()))
.merge(create_landed_cost_adjustment_line_read_routes(self.landed_cost_adjustment_line_service.clone()))
.merge(create_location_read_routes(self.location_service.clone()))
.merge(create_stock_move_read_routes(self.stock_move_service.clone()))
.merge(create_stock_move_line_read_routes(self.stock_move_line_service.clone()))
.merge(create_operation_type_read_routes(self.operation_type_service.clone()))
.merge(create_transfer_read_routes(self.transfer_service.clone()))
.merge(create_route_read_routes(self.route_service.clone()))
.merge(create_route_rule_read_routes(self.route_rule_service.clone()))
.merge(create_reordering_rule_read_routes(self.reordering_rule_service.clone()))
.merge(create_purchase_receipt_read_routes(self.purchase_receipt_service.clone()))
.merge(create_purchase_receipt_item_read_routes(self.purchase_receipt_item_service.clone()))
.merge(create_quant_read_routes(self.quant_service.clone()))
.merge(create_scrap_read_routes(self.scrap_service.clone()))
.merge(create_scrap_reason_tag_read_routes(self.scrap_reason_tag_service.clone()))
.merge(create_stock_entry_read_routes(self.stock_entry_service.clone()))
.merge(create_stock_entry_item_read_routes(self.stock_entry_item_service.clone()))
.merge(create_stock_ledger_entry_read_routes(self.stock_ledger_entry_service.clone()))
.merge(create_bin_read_routes(self.bin_service.clone()))
.merge(create_stock_reconciliation_read_routes(self.stock_reconciliation_service.clone()))
.merge(create_stock_reconciliation_item_read_routes(self.stock_reconciliation_item_service.clone()))
.merge(create_package_type_read_routes(self.package_type_service.clone()))
.merge(create_storage_category_read_routes(self.storage_category_service.clone()))
.merge(create_storage_category_capacity_read_routes(self.storage_category_capacity_service.clone()))
.merge(create_putaway_rule_read_routes(self.putaway_rule_service.clone()))
.merge(create_lot_read_routes(self.lot_service.clone()))
.merge(create_package_read_routes(self.package_service.clone()))
.merge(create_warehouse_read_routes(self.warehouse_service.clone()))
.merge(create_stock_item_read_routes(self.stock_item_service.clone()))
}
}
pub struct InventoryModuleBuilder {
db_pool: Option<PgPool>,
}
impl InventoryModuleBuilder {
pub fn new() -> Self {
Self {
db_pool: None,
}
}
pub fn with_database(mut self, pool: PgPool) -> Self {
self.db_pool = Some(pool);
self
}
pub fn build(self) -> anyhow::Result<InventoryModule> {
let db_pool = self.db_pool
.ok_or_else(|| anyhow::anyhow!("Database pool not configured"))?;
let picking_batch_repository = Arc::new(PickingBatchRepository::new(db_pool.clone()));
let picking_batch_service = Arc::new(crate::application::service::build_picking_batch_service(picking_batch_repository.clone()));
let delivery_note_repository = Arc::new(DeliveryNoteRepository::new(db_pool.clone()));
let delivery_note_service = Arc::new(crate::application::service::build_delivery_note_service(delivery_note_repository.clone()));
let delivery_note_item_repository = Arc::new(DeliveryNoteItemRepository::new(db_pool.clone()));
let delivery_note_item_service = Arc::new(crate::application::service::build_delivery_note_item_service(delivery_note_item_repository.clone()));
let inventory_company_setting_repository = Arc::new(InventoryCompanySettingRepository::new(db_pool.clone()));
let inventory_company_setting_service = Arc::new(crate::application::service::build_inventory_company_setting_service(inventory_company_setting_repository.clone()));
let landed_cost_repository = Arc::new(LandedCostRepository::new(db_pool.clone()));
let landed_cost_service = Arc::new(crate::application::service::build_landed_cost_service(landed_cost_repository.clone()));
let landed_cost_line_repository = Arc::new(LandedCostLineRepository::new(db_pool.clone()));
let landed_cost_line_service = Arc::new(crate::application::service::build_landed_cost_line_service(landed_cost_line_repository.clone()));
let landed_cost_adjustment_line_repository = Arc::new(LandedCostAdjustmentLineRepository::new(db_pool.clone()));
let landed_cost_adjustment_line_service = Arc::new(crate::application::service::build_landed_cost_adjustment_line_service(landed_cost_adjustment_line_repository.clone()));
let location_repository = Arc::new(LocationRepository::new(db_pool.clone()));
let location_service = Arc::new(crate::application::service::build_location_service(location_repository.clone()));
let stock_move_repository = Arc::new(StockMoveRepository::new(db_pool.clone()));
let stock_move_service = Arc::new(crate::application::service::build_stock_move_service(stock_move_repository.clone()));
let stock_move_line_repository = Arc::new(StockMoveLineRepository::new(db_pool.clone()));
let stock_move_line_service = Arc::new(crate::application::service::build_stock_move_line_service(stock_move_line_repository.clone()));
let operation_type_repository = Arc::new(OperationTypeRepository::new(db_pool.clone()));
let operation_type_service = Arc::new(crate::application::service::build_operation_type_service(operation_type_repository.clone()));
let transfer_repository = Arc::new(TransferRepository::new(db_pool.clone()));
let transfer_service = Arc::new(crate::application::service::build_transfer_service(transfer_repository.clone()));
let route_repository = Arc::new(RouteRepository::new(db_pool.clone()));
let route_service = Arc::new(crate::application::service::build_route_service(route_repository.clone()));
let route_rule_repository = Arc::new(RouteRuleRepository::new(db_pool.clone()));
let route_rule_service = Arc::new(crate::application::service::build_route_rule_service(route_rule_repository.clone()));
let reordering_rule_repository = Arc::new(ReorderingRuleRepository::new(db_pool.clone()));
let reordering_rule_service = Arc::new(crate::application::service::build_reordering_rule_service(reordering_rule_repository.clone()));
let purchase_receipt_repository = Arc::new(PurchaseReceiptRepository::new(db_pool.clone()));
let purchase_receipt_service = Arc::new(crate::application::service::build_purchase_receipt_service(purchase_receipt_repository.clone()));
let purchase_receipt_item_repository = Arc::new(PurchaseReceiptItemRepository::new(db_pool.clone()));
let purchase_receipt_item_service = Arc::new(crate::application::service::build_purchase_receipt_item_service(purchase_receipt_item_repository.clone()));
let quant_repository = Arc::new(QuantRepository::new(db_pool.clone()));
let quant_service = Arc::new(crate::application::service::build_quant_service(quant_repository.clone()));
let scrap_repository = Arc::new(ScrapRepository::new(db_pool.clone()));
let scrap_service = Arc::new(crate::application::service::build_scrap_service(scrap_repository.clone()));
let scrap_reason_tag_repository = Arc::new(ScrapReasonTagRepository::new(db_pool.clone()));
let scrap_reason_tag_service = Arc::new(crate::application::service::build_scrap_reason_tag_service(scrap_reason_tag_repository.clone()));
let stock_entry_repository = Arc::new(StockEntryRepository::new(db_pool.clone()));
let stock_entry_service = Arc::new(crate::application::service::build_stock_entry_service(stock_entry_repository.clone()));
let stock_entry_item_repository = Arc::new(StockEntryItemRepository::new(db_pool.clone()));
let stock_entry_item_service = Arc::new(crate::application::service::build_stock_entry_item_service(stock_entry_item_repository.clone()));
let stock_ledger_entry_repository = Arc::new(StockLedgerEntryRepository::new(db_pool.clone()));
let stock_ledger_entry_service = Arc::new(crate::application::service::build_stock_ledger_entry_service(stock_ledger_entry_repository.clone()));
let bin_repository = Arc::new(BinRepository::new(db_pool.clone()));
let bin_service = Arc::new(crate::application::service::build_bin_service(bin_repository.clone()));
let stock_reconciliation_repository = Arc::new(StockReconciliationRepository::new(db_pool.clone()));
let stock_reconciliation_service = Arc::new(crate::application::service::build_stock_reconciliation_service(stock_reconciliation_repository.clone()));
let stock_reconciliation_item_repository = Arc::new(StockReconciliationItemRepository::new(db_pool.clone()));
let stock_reconciliation_item_service = Arc::new(crate::application::service::build_stock_reconciliation_item_service(stock_reconciliation_item_repository.clone()));
let package_type_repository = Arc::new(PackageTypeRepository::new(db_pool.clone()));
let package_type_service = Arc::new(crate::application::service::build_package_type_service(package_type_repository.clone()));
let storage_category_repository = Arc::new(StorageCategoryRepository::new(db_pool.clone()));
let storage_category_service = Arc::new(crate::application::service::build_storage_category_service(storage_category_repository.clone()));
let storage_category_capacity_repository = Arc::new(StorageCategoryCapacityRepository::new(db_pool.clone()));
let storage_category_capacity_service = Arc::new(crate::application::service::build_storage_category_capacity_service(storage_category_capacity_repository.clone()));
let putaway_rule_repository = Arc::new(PutawayRuleRepository::new(db_pool.clone()));
let putaway_rule_service = Arc::new(crate::application::service::build_putaway_rule_service(putaway_rule_repository.clone()));
let lot_repository = Arc::new(LotRepository::new(db_pool.clone()));
let lot_service = Arc::new(crate::application::service::build_lot_service(lot_repository.clone()));
let package_repository = Arc::new(PackageRepository::new(db_pool.clone()));
let package_service = Arc::new(crate::application::service::build_package_service(package_repository.clone()));
let warehouse_repository = Arc::new(WarehouseRepository::new(db_pool.clone()));
let warehouse_service = Arc::new(crate::application::service::build_warehouse_service(warehouse_repository.clone()));
let stock_item_repository = Arc::new(StockItemRepository::new(db_pool.clone()));
let stock_item_service = Arc::new(crate::application::service::build_stock_item_service(stock_item_repository.clone()));
Ok(InventoryModule {
picking_batch_service,
delivery_note_service,
delivery_note_item_service,
inventory_company_setting_service,
landed_cost_service,
landed_cost_line_service,
landed_cost_adjustment_line_service,
location_service,
stock_move_service,
stock_move_line_service,
operation_type_service,
transfer_service,
route_service,
route_rule_service,
reordering_rule_service,
purchase_receipt_service,
purchase_receipt_item_service,
quant_service,
scrap_service,
scrap_reason_tag_service,
stock_entry_service,
stock_entry_item_service,
stock_ledger_entry_service,
bin_service,
stock_reconciliation_service,
stock_reconciliation_item_service,
package_type_service,
storage_category_service,
storage_category_capacity_service,
putaway_rule_service,
lot_service,
package_service,
warehouse_service,
stock_item_service,
})
}
}
impl Default for InventoryModuleBuilder {
fn default() -> Self {
Self::new()
}
}
include!("mod.ext.rs");