from fastapi import APIRouter, HTTPException, Request from app.services.auth_service import get_user_for_session from app.services.system_service import arm_system, system_status from app.services.zerodha_service import KiteApiError router = APIRouter(prefix="/api/system") def _require_user(request: Request): session_id = request.cookies.get("session_id") if not session_id: raise HTTPException(status_code=401, detail="Not authenticated") user = get_user_for_session(session_id) if not user: raise HTTPException(status_code=401, detail="Not authenticated") return user @router.post("/arm") def arm(request: Request): user = _require_user(request) try: result = arm_system(user["id"], client_ip=request.client.host if request.client else None) except KiteApiError as exc: raise HTTPException(status_code=502, detail=str(exc)) from exc if not result.get("ok"): if result.get("code") == "BROKER_AUTH_REQUIRED": raise HTTPException( status_code=401, detail={"redirect_url": result.get("redirect_url")}, ) raise HTTPException(status_code=400, detail="Unable to arm system") return result @router.get("/status") def status(request: Request): user = _require_user(request) return system_status(user["id"])