2026-03-28 14:32:08 +05:30

73 lines
2.2 KiB
Python

from fastapi import APIRouter, HTTPException, Query, Request
from fastapi.responses import JSONResponse
from app.models import StrategyStartRequest
from app.services.strategy_service import (
start_strategy,
resume_strategy,
stop_strategy,
get_strategy_status,
get_strategy_summary,
get_engine_status,
get_market_status,
get_strategy_logs as fetch_strategy_logs,
)
from app.services.tenant import get_request_user_id
router = APIRouter(prefix="/api")
@router.post("/strategy/start")
def start(req: StrategyStartRequest, request: Request):
user_id = get_request_user_id(request)
return start_strategy(req, user_id)
@router.post("/strategy/stop")
def stop(request: Request):
user_id = get_request_user_id(request)
return stop_strategy(user_id)
@router.post("/strategy/resume")
def resume(request: Request):
try:
user_id = get_request_user_id(request)
return resume_strategy(user_id)
except HTTPException:
raise
except Exception as exc:
print(f"[STRATEGY] unhandled resume route failure: {exc}", flush=True)
return JSONResponse(
status_code=200,
content={
"status": "resume_failed",
"message": f"Unable to resume strategy: {exc}",
},
)
@router.get("/strategy/status")
def status(request: Request):
user_id = get_request_user_id(request)
return get_strategy_status(user_id)
@router.get("/strategy/summary")
def summary(request: Request):
user_id = get_request_user_id(request)
return get_strategy_summary(user_id)
@router.get("/engine/status")
def engine_status(request: Request):
user_id = get_request_user_id(request)
return get_engine_status(user_id)
@router.get("/market/status")
def market_status():
return get_market_status()
@router.get("/logs")
def get_logs(request: Request, since_seq: int = Query(0)):
user_id = get_request_user_id(request)
return fetch_strategy_logs(user_id, since_seq)
@router.get("/strategy/logs")
def get_strategy_logs_endpoint(request: Request, since_seq: int = Query(0)):
user_id = get_request_user_id(request)
return fetch_strategy_logs(user_id, since_seq)