76 lines
2.0 KiB
Python
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"}
|