Verified catalogue of mobiles and laptops sold in India, collected from real retail listings (FastAPI backend, React frontend, Postgres/pgvector). - REST API under /api/elec (read-only catalogue; admin endpoints need login) - MCP server (FastMCP) at /mcp/ with list_categories, search_products, get_product and price_history tools - Real ratings and reviews read from product pages and search results - Production Dockerfile (requirements-api.txt, no PyTorch) and .env.production.example; remote database only via an explicit ELEC_ALLOW_REMOTE_DB host/name allowlist - docs/API.md: endpoint and MCP reference with live examples Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
import logging
|
|
|
|
from fastapi import APIRouter
|
|
|
|
from app.api.schemas import AuthConfigOut, HealthOut, SearchStatusOut
|
|
from app.electronics.db.connection import check_connection
|
|
from app.infrastructure.security import auth_config_summary
|
|
from app.infrastructure.settings import (
|
|
DB_NAME, EMBEDDINGS_MODEL, OLLAMA_MODEL_NAME, USE_DDG_SEARCH, USE_GOOGLE_CSE,
|
|
)
|
|
from app.services import ollama_service
|
|
|
|
logger = logging.getLogger(__name__)
|
|
router = APIRouter(tags=["health"])
|
|
|
|
|
|
@router.get("/health", response_model=HealthOut)
|
|
def health() -> HealthOut:
|
|
"""Liveness/readiness probe used by the React app to show a banner when
|
|
Postgres or Ollama aren't reachable, instead of failing silently.
|
|
|
|
Ollama being down does not make the service degraded: it is only used to
|
|
fill spec gaps, and the pipeline runs deterministically without it."""
|
|
db_ok = check_connection()
|
|
return HealthOut(
|
|
status="ok" if db_ok else "degraded",
|
|
database=db_ok,
|
|
database_name=DB_NAME,
|
|
ollama=bool(ollama_service._ensure_client()),
|
|
ollama_model=OLLAMA_MODEL_NAME,
|
|
embeddings_model=EMBEDDINGS_MODEL,
|
|
search=SearchStatusOut(ddg=USE_DDG_SEARCH, google_cse=USE_GOOGLE_CSE),
|
|
auth=AuthConfigOut(**auth_config_summary()),
|
|
)
|