# app/api/v1/vendor/__init__.py """ Vendor API router aggregation. This module aggregates all vendor-related JSON API endpoints. IMPORTANT: - This router is for JSON API endpoints only - HTML page routes are mounted separately in main.py at /vendor/* - Do NOT include pages.router here - it causes route conflicts MODULE SYSTEM: Routes can be module-gated using require_module_access() dependency. For multi-tenant apps, module enablement is checked at request time based on platform context (not at route registration time). Self-contained modules (auto-discovered from app/modules/{module}/routes/api/vendor.py): - analytics: Vendor analytics and reporting - billing: Subscription tiers, vendor billing, checkout, add-ons, features, usage - inventory: Stock management, inventory tracking - orders: Order management, fulfillment, exceptions, invoices - marketplace: Letzshop integration, product sync, onboarding - catalog: Vendor product catalog management - cms: Content pages management, media library - customers: Customer management - payments: Payment configuration, Stripe connect, transactions - tenancy: Vendor info, auth, profile, team management - messaging: Messages, notifications, email settings, email templates - core: Dashboard, settings """ from fastapi import APIRouter # Create vendor router router = APIRouter() # ============================================================================ # JSON API ROUTES ONLY # ============================================================================ # All vendor routes are now auto-discovered from self-contained modules. # ============================================================================ # Auto-discovered Module Routes # ============================================================================ # Routes from self-contained modules are auto-discovered and registered. # Modules include: billing, inventory, orders, marketplace, cms, customers, payments # Routes are sorted by priority, so catch-all routes (CMS) come last. from app.modules.routes import get_vendor_api_routes for route_info in get_vendor_api_routes(): # Only pass prefix if custom_prefix is set (router already has internal prefix) if route_info.custom_prefix: router.include_router( route_info.router, prefix=route_info.custom_prefix, tags=route_info.tags, ) else: router.include_router( route_info.router, tags=route_info.tags, ) __all__ = ["router"]