2026-02-01 13:57:30 +00:00

76 lines
2.0 KiB
Python

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"}