import logging from fastapi import FastAPI from fastapi.responses import JSONResponse from fastapi.middleware.cors import CORSMiddleware from backend.api.routes import health, query, repo, upload from backend.core.config import settings from backend.core.logging import configure_logging configure_logging() logger = logging.getLogger(__name__) app = FastAPI(title=settings.app_name) app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.include_router(health.router, prefix=settings.api_prefix) app.include_router(upload.router, prefix=settings.api_prefix) app.include_router(repo.router, prefix=settings.api_prefix) app.include_router(query.router, prefix=settings.api_prefix) @app.exception_handler(Exception) async def unhandled_exception_handler(request, exc: Exception): logger.exception("Unhandled request error: %s %s", request.method, request.url) detail = str(exc) if settings.debug_errors else "Internal Server Error" return JSONResponse(status_code=500, content={"detail": detail}) @app.get("/") def root() -> dict[str, str]: return {"message": settings.app_name, "docs": "/docs"}