From 703cf1a7739032b94fcc545dea74dd286fb1fac2 Mon Sep 17 00:00:00 2001 From: paisley Date: Thu, 20 Nov 2025 13:46:10 +0800 Subject: [PATCH] fix: stop strategy agent before delete --- .../valuecell/server/api/routers/strategy_agent.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/python/valuecell/server/api/routers/strategy_agent.py b/python/valuecell/server/api/routers/strategy_agent.py index 27b2c5a4c..c1eb0abce 100644 --- a/python/valuecell/server/api/routers/strategy_agent.py +++ b/python/valuecell/server/api/routers/strategy_agent.py @@ -291,6 +291,7 @@ async def delete_strategy_agent( """Delete a strategy created by StrategyAgent. - Validates the strategy exists. + - Ensures the strategy is stopped before deletion (idempotent stop). - Optionally cascades deletion to holdings, portfolio snapshots, and details. - Returns a success response when completed. """ @@ -300,13 +301,22 @@ async def delete_strategy_agent( if not strategy: raise HTTPException(status_code=404, detail="Strategy not found") + # Stop strategy before deletion (best-effort, idempotent) + try: + current_status = getattr(strategy, "status", None) + if current_status != "stopped": + repo.upsert_strategy(strategy_id=id, status="stopped") + except Exception: + # Do not fail deletion due to stop failure; proceed to deletion + pass + ok = repo.delete_strategy(id, cascade=cascade) if not ok: raise HTTPException(status_code=500, detail="Failed to delete strategy") return SuccessResponse.create( data={"strategy_id": id}, - msg=f"Strategy '{id}' deleted successfully", + msg=f"Strategy '{id}' stopped (if running) and deleted successfully", ) except HTTPException: raise