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:
2026-01-28 22:22:08 +01:00
parent d987274e2c
commit 37cf74cbf4
3 changed files with 119 additions and 178 deletions

40
main.py
View File

@@ -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)