# app/modules/orders/definition.py """ Orders module definition. Defines the orders module including its features, menu items, route configurations, and self-contained module settings. """ from app.modules.base import ModuleDefinition from models.database.admin_menu_config import FrontendType def _get_admin_router(): """Lazy import of admin router to avoid circular imports.""" from app.modules.orders.routes.admin import admin_router return admin_router def _get_vendor_router(): """Lazy import of vendor router to avoid circular imports.""" from app.modules.orders.routes.vendor import vendor_router return vendor_router # Orders module definition orders_module = ModuleDefinition( code="orders", name="Order Management", description=( "Order processing, fulfillment tracking, customer checkout, " "invoicing, and bulk order operations. Uses the payments module for checkout." ), version="1.0.0", requires=["payments"], # Depends on payments module for checkout features=[ "order_management", # Basic order CRUD "order_bulk_actions", # Bulk status updates "order_export", # Export orders to CSV/Excel "automation_rules", # Order automation rules "fulfillment_tracking", # Shipping and tracking "shipping_management", # Carrier integration "order_exceptions", # Order item exception handling "customer_checkout", # Customer checkout flow "invoice_generation", # Invoice creation "invoice_pdf", # PDF invoice generation ], menu_items={ FrontendType.ADMIN: [ "orders", # Platform-wide order management ], FrontendType.VENDOR: [ "orders", # Vendor order management ], }, is_core=False, # ========================================================================= # Self-Contained Module Configuration # ========================================================================= is_self_contained=True, services_path="app.modules.orders.services", models_path="app.modules.orders.models", schemas_path="app.modules.orders.schemas", exceptions_path="app.modules.orders.exceptions", ) def get_orders_module_with_routers() -> ModuleDefinition: """ Get orders module with routers attached. This function attaches the routers lazily to avoid circular imports during module initialization. """ orders_module.admin_router = _get_admin_router() orders_module.vendor_router = _get_vendor_router() return orders_module __all__ = ["orders_module", "get_orders_module_with_routers"]