""" FastAPI application factory and middleware setup. Configures CORS, authentication, and error handling. """ from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import JSONResponse from app.core.settings import get_settings from app.routers import auth, users, decks, rooms, games, admin settings = get_settings() app = FastAPI( title=settings.APP_NAME, version=settings.APP_VERSION, docs_url="/docs", redoc_url="/redoc", ) # CORS configuration app.add_middleware( CORSMiddleware, allow_origins=settings.CORS_ORIGINS, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Global exception handlers @app.exception_handler(Exception) async def global_exception_handler(request, exc): """Handle unhandled exceptions gracefully.""" return JSONResponse( status_code=500, content={"detail": "Internal server error"}, ) # Include routers app.include_router(auth.router, prefix="/api/v1/auth", tags=["Authentication"]) app.include_router(users.router, prefix="/api/v1/users", tags=["Users"]) app.include_router(decks.router, prefix="/api/v1/decks", tags=["Decks"]) app.include_router(rooms.router, prefix="/api/v1/rooms", tags=["Rooms"]) app.include_router(games.router, prefix="/api/v1/games", tags=["Games"]) app.include_router(admin.router, prefix="/api/v1/admin", tags=["Admin"]) @app.get("/health") async def health_check(): """Health check endpoint for monitoring.""" return {"status": "healthy", "version": settings.APP_VERSION}