# app/modules/marketplace/definition.py """ Marketplace module definition. Defines the marketplace module including its features, menu items, dependencies, route configurations, and scheduled tasks. Note: This module requires the inventory module to be enabled. """ from app.modules.base import ModuleDefinition, ScheduledTask from models.database.admin_menu_config import FrontendType def _get_admin_router(): """Lazy import of admin router to avoid circular imports.""" from app.modules.marketplace.routes.api.admin import admin_router return admin_router def _get_vendor_router(): """Lazy import of vendor router to avoid circular imports.""" from app.modules.marketplace.routes.api.vendor import vendor_router return vendor_router # Marketplace module definition marketplace_module = ModuleDefinition( code="marketplace", name="Marketplace (Letzshop)", description=( "Letzshop marketplace integration for product sync, order import, " "and catalog synchronization." ), version="1.0.0", requires=["inventory"], # Depends on inventory module features=[ "letzshop_sync", # Sync products with Letzshop "marketplace_import", # Import products from marketplace "product_sync", # Bidirectional product sync "order_import", # Import orders from marketplace "marketplace_analytics", # Marketplace performance metrics ], menu_items={ FrontendType.ADMIN: [ "marketplace-letzshop", # Marketplace monitoring ], FrontendType.VENDOR: [ "marketplace", # Vendor marketplace settings "letzshop", # Letzshop integration ], }, is_core=False, # ========================================================================= # Self-Contained Module Configuration # ========================================================================= is_self_contained=True, services_path="app.modules.marketplace.services", models_path="app.modules.marketplace.models", schemas_path="app.modules.marketplace.schemas", exceptions_path="app.modules.marketplace.exceptions", tasks_path="app.modules.marketplace.tasks", # ========================================================================= # Scheduled Tasks # ========================================================================= scheduled_tasks=[ ScheduledTask( name="marketplace.sync_vendor_directory", task="app.modules.marketplace.tasks.sync_tasks.sync_vendor_directory", schedule="0 2 * * *", # Daily at 02:00 options={"queue": "scheduled"}, ), ], ) def get_marketplace_module_with_routers() -> ModuleDefinition: """ Get marketplace module with routers attached. This function attaches the routers lazily to avoid circular imports during module initialization. """ marketplace_module.admin_router = _get_admin_router() marketplace_module.vendor_router = _get_vendor_router() return marketplace_module __all__ = ["marketplace_module", "get_marketplace_module_with_routers"]