# app/modules/orders/definition.py """ Orders module definition. Defines the orders module including its features, menu items, and route configurations. """ 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, " "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 ], menu_items={ FrontendType.ADMIN: [ "orders", # Platform-wide order management ], FrontendType.VENDOR: [ "orders", # Vendor order management ], }, is_core=False, ) 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"]