from fastapi import FastAPI from fastapi.responses import FileResponse from fastapi.staticfiles import StaticFiles from pathlib import Path from app.api.routes import commodities, positions, analytics, reports, disagg app = FastAPI( title="CFTC COT Explorer", description="Explore CFTC Commitments of Traders positioning data", version="1.0.0", ) app.include_router(commodities.router) app.include_router(positions.router) app.include_router(analytics.router) app.include_router(reports.router) app.include_router(disagg.router) FRONTEND_DIR = Path(__file__).parent.parent.parent / "frontend" if FRONTEND_DIR.exists(): app.mount("/static", StaticFiles(directory=str(FRONTEND_DIR)), name="static") @app.get("/", include_in_schema=False) async def root(): index = FRONTEND_DIR / "index.html" if index.exists(): return FileResponse(str(index)) return {"message": "CFTC COT Explorer API", "docs": "/docs"} @app.get("/health", include_in_schema=False) async def health(): from app.db import get_db with get_db() as conn: count = conn.execute("SELECT COUNT(*) FROM reports").fetchone()[0] return {"status": "ok", "reports": count}