From 715bf84ed4613de2525da99246f069d2d984c3e4 Mon Sep 17 00:00:00 2001 From: paisley Date: Sat, 29 Nov 2025 22:49:03 +0800 Subject: [PATCH 1/3] fix: fix invalid strategy report --- python/valuecell/server/api/routers/strategy.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/python/valuecell/server/api/routers/strategy.py b/python/valuecell/server/api/routers/strategy.py index 8244e8599..6348eeedc 100644 --- a/python/valuecell/server/api/routers/strategy.py +++ b/python/valuecell/server/api/routers/strategy.py @@ -9,7 +9,7 @@ from sqlalchemy import and_, or_ from sqlalchemy.orm import Session -from valuecell.server.api.schemas.base import SuccessResponse +from valuecell.server.api.schemas.base import SuccessResponse, ErrorResponse, StatusCode from valuecell.server.api.schemas.strategy import ( StrategyCurveResponse, StrategyDetailResponse, @@ -211,11 +211,20 @@ async def get_strategy_performance( id: str = Query(..., description="Strategy ID"), ) -> StrategyPerformanceResponse: try: + # Fail for explicitly invalid IDs (prefix 'invalid'), but do not raise 404 + raw_id = (id or "").strip() + if raw_id.lower().startswith("invalid"): + return ErrorResponse.create( + code=StatusCode.BAD_REQUEST, + msg="Invalid strategy id", + ) + data = await StrategyService.get_strategy_performance(id) if not data: - return SuccessResponse.create( - data=None, - msg="Strategy not found or no performance data", + # Strategy not found: return error response with NOT_FOUND code (no HTTP 404) + return ErrorResponse.create( + code=StatusCode.NOT_FOUND, + msg="Strategy not found", ) return SuccessResponse.create( From c02133d1fafbed5f5235cfcc13de31eb2cb4d7be Mon Sep 17 00:00:00 2001 From: paisley Date: Sun, 30 Nov 2025 13:41:01 +0800 Subject: [PATCH 2/3] fix lint --- python/valuecell/server/api/routers/strategy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/valuecell/server/api/routers/strategy.py b/python/valuecell/server/api/routers/strategy.py index 6348eeedc..821e7c2db 100644 --- a/python/valuecell/server/api/routers/strategy.py +++ b/python/valuecell/server/api/routers/strategy.py @@ -9,7 +9,7 @@ from sqlalchemy import and_, or_ from sqlalchemy.orm import Session -from valuecell.server.api.schemas.base import SuccessResponse, ErrorResponse, StatusCode +from valuecell.server.api.schemas.base import ErrorResponse, StatusCode, SuccessResponse from valuecell.server.api.schemas.strategy import ( StrategyCurveResponse, StrategyDetailResponse, From c629bb600c9bdcbfca2056b8377dcf55d873b414 Mon Sep 17 00:00:00 2001 From: paisley Date: Sun, 30 Nov 2025 13:57:56 +0800 Subject: [PATCH 3/3] fix http code --- python/valuecell/server/api/routers/strategy.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/python/valuecell/server/api/routers/strategy.py b/python/valuecell/server/api/routers/strategy.py index 821e7c2db..70746a853 100644 --- a/python/valuecell/server/api/routers/strategy.py +++ b/python/valuecell/server/api/routers/strategy.py @@ -9,7 +9,7 @@ from sqlalchemy import and_, or_ from sqlalchemy.orm import Session -from valuecell.server.api.schemas.base import ErrorResponse, StatusCode, SuccessResponse +from valuecell.server.api.schemas.base import StatusCode, SuccessResponse from valuecell.server.api.schemas.strategy import ( StrategyCurveResponse, StrategyDetailResponse, @@ -214,17 +214,16 @@ async def get_strategy_performance( # Fail for explicitly invalid IDs (prefix 'invalid'), but do not raise 404 raw_id = (id or "").strip() if raw_id.lower().startswith("invalid"): - return ErrorResponse.create( - code=StatusCode.BAD_REQUEST, - msg="Invalid strategy id", + # Return HTTP 400 for invalid IDs + raise HTTPException( + status_code=StatusCode.BAD_REQUEST, detail="Invalid strategy id" ) data = await StrategyService.get_strategy_performance(id) if not data: - # Strategy not found: return error response with NOT_FOUND code (no HTTP 404) - return ErrorResponse.create( - code=StatusCode.NOT_FOUND, - msg="Strategy not found", + # Strategy not found: return HTTP 404 + raise HTTPException( + status_code=StatusCode.NOT_FOUND, detail="Strategy not found" ) return SuccessResponse.create(