"""Health check endpoint — outside /api/v1 prefix for Docker healthchecks.""" from fastapi import APIRouter, Depends from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import text from app.database import get_db from app.redis import get_redis router = APIRouter() @router.get("/health") async def health_check(db: AsyncSession = Depends(get_db)): """Basic health check — verifies API, DB, and Redis are reachable.""" checks = {"api": "ok", "database": "error", "redis": "error"} try: await db.execute(text("SELECT 1")) checks["database"] = "ok" except Exception: pass try: redis = await get_redis() await redis.ping() checks["redis"] = "ok" except Exception: pass healthy = all(v == "ok" for v in checks.values()) return {"status": "healthy" if healthy else "degraded", "checks": checks}