From dabfd7379e6689d6803e180c40deecde897e5e42 Mon Sep 17 00:00:00 2001 From: CartSnitch Engineer Bot Date: Tue, 31 Mar 2026 23:56:20 +0000 Subject: [PATCH] fix(api): mount data routers under /api/v1 prefix Fixes CAR-161 UAT failure: k8s HTTPRoute forwards /api/* to the API gateway without path rewriting, so requests arrive at FastAPI as /api/v1/purchases, /api/v1/products, etc. FastAPI previously mounted data routers at root, causing 404s on all /api/v1/* calls. Keep health and auth routers at root (probes hit /health directly; auth traffic is routed to the auth service via HTTPRoute). Co-Authored-By: Paperclip --- src/cartsnitch_api/main.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/cartsnitch_api/main.py b/src/cartsnitch_api/main.py index 1cd54ef..4df6f09 100644 --- a/src/cartsnitch_api/main.py +++ b/src/cartsnitch_api/main.py @@ -2,7 +2,7 @@ from contextlib import asynccontextmanager -from fastapi import FastAPI +from fastapi import APIRouter, FastAPI from cartsnitch_api.auth.routes import router as auth_router from cartsnitch_api.middleware.cors import add_cors_middleware @@ -46,15 +46,19 @@ def create_app() -> FastAPI: # Routers app.include_router(health_router) app.include_router(auth_router) - app.include_router(stores_router) - app.include_router(purchases_router) - app.include_router(products_router) - app.include_router(prices_router) - app.include_router(coupons_router) - app.include_router(shopping_router) - app.include_router(alerts_router) - app.include_router(scraping_router) - app.include_router(public_router) + + # Data endpoints mounted under /api/v1 + v1_router = APIRouter(prefix="/api/v1") + v1_router.include_router(stores_router) + v1_router.include_router(purchases_router) + v1_router.include_router(products_router) + v1_router.include_router(prices_router) + v1_router.include_router(coupons_router) + v1_router.include_router(shopping_router) + v1_router.include_router(alerts_router) + v1_router.include_router(scraping_router) + v1_router.include_router(public_router) + app.include_router(v1_router) return app