from typing import List, Optional from fastapi import APIRouter, HTTPException, Query from pydantic import BaseModel from services import saxo_auth from services.saxo_scheduler import get_watchlist, set_watchlist from services.database import get_saxo_snapshots router = APIRouter(prefix="/api/saxo", tags=["saxo"]) class WatchlistRequest(BaseModel): symbols: List[str] @router.get("/status") def status(): return saxo_auth.get_status() @router.post("/disconnect") def disconnect(): saxo_auth.disconnect() return {"disconnected": True} @router.get("/watchlist") def watchlist(): return {"symbols": get_watchlist()} @router.put("/watchlist") def update_watchlist(req: WatchlistRequest): set_watchlist(req.symbols) return {"symbols": get_watchlist()} @router.post("/snapshot-now/{symbol}") def snapshot_now(symbol: str): from services.saxo_client import snapshot_options_chain, SaxoNotConnected from services.database import save_saxo_snapshot_rows try: rows = snapshot_options_chain(symbol) except SaxoNotConnected as e: raise HTTPException(status_code=401, detail=str(e)) except ValueError as e: raise HTTPException(status_code=502, detail=str(e)) save_saxo_snapshot_rows(rows) return {"symbol": symbol.upper(), "rows_saved": len(rows)} @router.get("/history") def history( symbol: Optional[str] = Query(None), date_from: Optional[str] = Query(None), date_to: Optional[str] = Query(None), ): return get_saxo_snapshots(symbol, date_from, date_to)