# app/api/v1/store/__init__.py """ Store API router aggregation. This module aggregates all store-related JSON API endpoints. IMPORTANT: - This router is for JSON API endpoints only - HTML page routes are mounted separately in main.py at /store/* - 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/store.py): - analytics: Store analytics and reporting - billing: Subscription tiers, store billing, checkout, add-ons, features, usage - inventory: Stock management, inventory tracking - orders: Order management, fulfillment, exceptions, invoices - marketplace: Letzshop integration, product sync, onboarding - catalog: Store product catalog management - cms: Content pages management, media library - customers: Customer management - payments: Payment configuration, Stripe connect, transactions - tenancy: Store info, auth, profile, team management - messaging: Messages, notifications, email settings, email templates - core: Dashboard, settings """ from fastapi import APIRouter # Create store router router = APIRouter() # ============================================================================ # JSON API ROUTES ONLY # ============================================================================ # All store 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_store_api_routes for route_info in get_store_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"]