from fastapi import APIRouter, HTTPException, Request from app.services.paper_broker_service import ( add_cash, get_equity_curve, get_funds, get_orders, get_positions, get_trades, reset_paper_state, ) from app.services.tenant import get_request_user_id router = APIRouter(prefix="/api/paper") @router.get("/funds") def funds(request: Request): user_id = get_request_user_id(request) return {"funds": get_funds(user_id)} @router.get("/positions") def positions(request: Request): user_id = get_request_user_id(request) return {"positions": get_positions(user_id)} @router.get("/orders") def orders(request: Request): user_id = get_request_user_id(request) return {"orders": get_orders(user_id)} @router.get("/trades") def trades(request: Request): user_id = get_request_user_id(request) return {"trades": get_trades(user_id)} @router.get("/equity-curve") def equity_curve(request: Request): user_id = get_request_user_id(request) return get_equity_curve(user_id) @router.post("/add-cash") def add_cash_endpoint(request: Request, payload: dict): try: amount = float(payload.get("amount", 0)) except (TypeError, ValueError): raise HTTPException(status_code=400, detail="Invalid amount") if amount <= 0: raise HTTPException(status_code=400, detail="Amount must be positive") try: user_id = get_request_user_id(request) add_cash(user_id, amount) except ValueError as exc: raise HTTPException(status_code=400, detail=str(exc)) from exc return {"funds": get_funds(user_id)} @router.post("/reset") def reset_paper(request: Request): try: from app.services.strategy_service import stop_strategy user_id = get_request_user_id(request) stop_strategy(user_id) except Exception: pass user_id = get_request_user_id(request) reset_paper_state(user_id) return {"ok": True, "message": "Paper reset completed"}