fix: inherit App error catalogs on generated routes without local errors
This commit is contained in:
27
performance/errorInheritanceAcceptance.md
Normal file
27
performance/errorInheritanceAcceptance.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# v0.11.1-preview App 错误目录继承验收
|
||||
|
||||
## 问题与修复
|
||||
|
||||
在 Go 中用 `omni.WithErrors` 注册目录后,v0.11.0 生成路由无条件创建空目录 Encoder。Context 选择了该空目录,编码阶段又按空目录解析原始错误,造成已配置错误变成 500/英文系统提示。
|
||||
|
||||
修复让空 `WithErrors` 保持 Encoder 不变,生成器仅为非空路由目录绑定策略。Context 原有的 App fallback 因而能够生效;错误目录与响应格式仍独立选择。兼容旧生成代码中的空包装,非空路由目录保持独立、不与 App 合并。
|
||||
|
||||
## 复现与回归
|
||||
|
||||
- 修复前,`TestRouteInheritsAppErrorCatalog` 的普通路由通过;生成/RawJSON 路由在 Handler 与提前返回中间件两种入口、固定/模板/未知错误三种情况,共 12 项失败,均输出 500 和英文系统提示。
|
||||
- 修复后该用例全部通过;包括 HTTP 400/数字 400002/中文提示/data:null,HTTP 200 模板提示,未知错误使用项目配置的中文 INTERNAL_ERROR。
|
||||
- 独立路由用例验证相同错误标识使用路由自己的 409/业务码/提示,App 独有标识不渗入;路由的 detail 字段保持独立。
|
||||
- EmptyCatalog 编码用例验证完全透传已解析结果,保留原始 error 时也不会二次查空表;非法空目录配置仍拒绝。
|
||||
- 实际生成项目的 `.api` 没有任何 errorCatalog/error 定义。生成 Handler 调用手写 Service;普通路由、生成路由和全局中间件返回体完全一致,含模板参数、未知兜底和 data:null。
|
||||
- 生成消费者还覆盖 RawJSON 成功不包装、@errors none 继承 App、手写原文回执、路由 body limit 及超限中文错误、手写 Service 的重生成保护。
|
||||
|
||||
## 本地验证
|
||||
|
||||
环境:go1.27.1 darwin/arm64;日期:2026-09-24。
|
||||
|
||||
- `GO_OMNI_SCAFFOLD_INTEGRATION=1 go test -race -p=1 -count=1 -timeout=300s ./...` 全部通过。
|
||||
- `go vet ./...`、`go build ./...`、gofmt、`git diff --check` 通过。
|
||||
|
||||
本轮仅本地测试及独立生成消费者,没有修改 eTax/ePay 业务代码,没有访问业务服务器;未重跑外部 Redis/MySQL、Linux soak 或完整业务迁移。
|
||||
|
||||
远程固定版本验收在发布后追加,标签保持不可变。
|
||||
Reference in New Issue
Block a user