From 05dc2ef0e758e3cbc60ca26a0605b18f076ddea4 Mon Sep 17 00:00:00 2001 From: dela Date: Sun, 24 May 2026 17:57:08 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=8E=BB=E6=8E=89=20GetDerivatives?= =?UTF-8?q?=20=E7=9A=84=E5=81=87=20error=20=E8=BF=94=E5=9B=9E=20+=20?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=20API=20=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GetDerivatives 签名里的 error 返回永远是 nil,controller 那段 if err != nil 是死分支,会误导调用方以为存在"全失败"语义。当前产品策略是 best-effort response:局部失败 → warnings,bundle 永远非 nil,HTTP 永远 200。 等 Hermes 上游真要求"全失败 → 5xx"时再重新引入 error 返回。 同时把 docs/dev.md §13.5 示例补上 warnings 字段(上次重构遗漏的文档同步)。 --- docs/dev.md | 3 ++- internal/controller/restapi/v1/market_routes.go | 5 +---- internal/usecase/market_query.go | 4 ++-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/docs/dev.md b/docs/dev.md index 680ac4a..d3025e8 100644 --- a/docs/dev.md +++ b/docs/dev.md @@ -964,7 +964,8 @@ Response: "global": [], "topTraderPosition": [] }, - "takerBuySellVolume": [] + "takerBuySellVolume": [], + "warnings": [] } ``` diff --git a/internal/controller/restapi/v1/market_routes.go b/internal/controller/restapi/v1/market_routes.go index 7200afa..f2d23ee 100644 --- a/internal/controller/restapi/v1/market_routes.go +++ b/internal/controller/restapi/v1/market_routes.go @@ -76,10 +76,7 @@ func RegisterMarket(r fiber.Router, d MarketDeps) { return fiber.NewError(fiber.StatusBadRequest, "symbol is required") } - bundle, warnings, err := d.MarketQuery.GetDerivatives(c.UserContext(), symbol, period) - if err != nil { - return fiber.NewError(fiber.StatusInternalServerError, err.Error()) - } + bundle, warnings := d.MarketQuery.GetDerivatives(c.UserContext(), symbol, period) return c.JSON(fiber.Map{ "symbol": symbol, diff --git a/internal/usecase/market_query.go b/internal/usecase/market_query.go index 171bfc5..72a27ab 100644 --- a/internal/usecase/market_query.go +++ b/internal/usecase/market_query.go @@ -36,7 +36,7 @@ func NewMarketQueryUsecase( } } -func (u *MarketQueryUsecase) GetDerivatives(ctx context.Context, symbol, period string) (*entity.DerivativesBundle, []string, error) { +func (u *MarketQueryUsecase) GetDerivatives(ctx context.Context, symbol, period string) (*entity.DerivativesBundle, []string) { var ( currentFund *entity.FundingRate currentOI *entity.OpenInterest @@ -109,5 +109,5 @@ func (u *MarketQueryUsecase) GetDerivatives(ctx context.Context, symbol, period if warnings == nil { warnings = []string{} } - return bundle, warnings, nil + return bundle, warnings }