refactor: update registry and main.py for module auto-discovery
- app/modules/registry.py: Use auto-discovery from discovery.py - main.py: Integrate module route auto-discovery - app/routes/vendor_pages.py: Remove routes now handled by modules The registry now dynamically discovers modules from definition.py files instead of hardcoded imports. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
40
main.py
40
main.py
@@ -61,12 +61,11 @@ from app.core.lifespan import lifespan
|
||||
from app.exceptions import ServiceUnavailableException
|
||||
from app.exceptions.handler import setup_exception_handlers
|
||||
|
||||
# Import page routers
|
||||
# Import page routers (legacy routes - will be migrated to modules)
|
||||
from app.routes import admin_pages, platform_pages, shop_pages, vendor_pages
|
||||
|
||||
# Import CMS module page routers (self-contained module)
|
||||
from app.modules.cms.routes.pages import admin_router as cms_admin_pages
|
||||
from app.modules.cms.routes.pages import vendor_router as cms_vendor_pages
|
||||
# Module route auto-discovery
|
||||
from app.modules.routes import discover_module_routes, get_vendor_page_routes
|
||||
from app.utils.i18n import get_jinja2_globals
|
||||
from middleware.context import ContextMiddleware
|
||||
from middleware.language import LanguageMiddleware
|
||||
@@ -330,6 +329,7 @@ app.include_router(
|
||||
)
|
||||
|
||||
# Vendor management pages (dashboard, products, orders, etc.)
|
||||
# NOTE: Legacy routes - modules with their own routes will override these
|
||||
logger.info("Registering vendor page routes: /vendor/{code}/*")
|
||||
app.include_router(
|
||||
vendor_pages.router,
|
||||
@@ -338,12 +338,32 @@ app.include_router(
|
||||
include_in_schema=False,
|
||||
)
|
||||
|
||||
# CMS module vendor pages (self-contained module)
|
||||
# NOTE: Includes catch-all /{vendor_code}/{slug} - must be registered AFTER vendor_pages
|
||||
logger.info("Registering CMS vendor page routes: /vendor/{code}/content-pages/*")
|
||||
app.include_router(
|
||||
cms_vendor_pages, prefix="/vendor", tags=["cms-vendor-pages"], include_in_schema=False
|
||||
)
|
||||
# =============================================================================
|
||||
# AUTO-DISCOVERED MODULE ROUTES
|
||||
# =============================================================================
|
||||
# Self-contained modules register their routes automatically.
|
||||
# Routes are discovered from app/modules/*/routes/pages/ and routes/api/
|
||||
# NOTE: CMS has catch-all route, so it's registered last via priority sorting
|
||||
|
||||
logger.info("Auto-discovering module page routes...")
|
||||
vendor_page_routes = get_vendor_page_routes()
|
||||
|
||||
# Sort routes: CMS last (has catch-all), others alphabetically
|
||||
def route_priority(route):
|
||||
if route.module_code == "cms":
|
||||
return (1, route.module_code) # CMS last
|
||||
return (0, route.module_code)
|
||||
|
||||
vendor_page_routes.sort(key=route_priority)
|
||||
|
||||
for route_info in vendor_page_routes:
|
||||
logger.info(f" Registering {route_info.module_code} vendor pages: {route_info.prefix}")
|
||||
app.include_router(
|
||||
route_info.router,
|
||||
prefix=route_info.prefix,
|
||||
tags=route_info.tags,
|
||||
include_in_schema=route_info.include_in_schema,
|
||||
)
|
||||
|
||||
# Customer shop pages - Register at TWO prefixes:
|
||||
# 1. /shop/* (for subdomain/custom domain modes)
|
||||
|
||||
Reference in New Issue
Block a user