From 6228534155f34b426b9d7d1fbe1f0ef7221c10c5 Mon Sep 17 00:00:00 2001 From: huang <1724659546@qq.com> Date: Thu, 30 Oct 2025 17:23:07 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4openspace=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../changes/refactor-migrate-gin-to-echo/design.md | 5 +++++ openspec/changes/refactor-migrate-gin-to-echo/tasks.md | 10 +++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/openspec/changes/refactor-migrate-gin-to-echo/design.md b/openspec/changes/refactor-migrate-gin-to-echo/design.md index 9966e45..374a91e 100644 --- a/openspec/changes/refactor-migrate-gin-to-echo/design.md +++ b/openspec/changes/refactor-migrate-gin-to-echo/design.md @@ -59,6 +59,11 @@ - `controller_helpers.go` 中的泛型辅助函数将修改为返回 `error`,以适配 Echo 的错误处理链。 - **Rationale**: 这种重构使得审计逻辑更加清晰和内聚,避免了在中间件中进行复杂的响应体捕获。 +7. **DTO 注解 (Annotations)**: + - **From**: `json:"field" binding:"required"` + - **To**: `json:"field" validate:"required"` + - **Rationale**: Gin 使用 `binding` 标签进行请求参数绑定和验证。Echo 框架通常结合 `go-playground/validator` 库进行验证,其对应的标签为 `validate`。因此,所有 DTO 结构体中的 `binding` 标签需要替换为 `validate`。`json` 标签保持不变。 + ## Risks / Trade-offs - **Risk**: 迁移工作量大,可能遗漏某些 Gin 特有的功能或上下文用法,导致运行时错误。 diff --git a/openspec/changes/refactor-migrate-gin-to-echo/tasks.md b/openspec/changes/refactor-migrate-gin-to-echo/tasks.md index 6c62c13..80cebf2 100644 --- a/openspec/changes/refactor-migrate-gin-to-echo/tasks.md +++ b/openspec/changes/refactor-migrate-gin-to-echo/tasks.md @@ -48,7 +48,11 @@ - [x] `internal/app/controller/plan/plan_controller.go` - [x] `internal/app/controller/user/user_controller.go` -- [ ] **5. 核心 API 层 (`internal/app/api`)** +- [ ] **5. DTO 结构体注解** + - [ ] 检查并修改 `internal/app/dto` 包下所有结构体的注解。将所有 Gin 相关的注解(例如 `binding:"..."`)替换为 Echo + 兼容的注解(例如 `validate:"..."`)。`json:"..."` 标签通常保持不变。 + +- [ ] **6. 核心 API 层 (`internal/app/api`)** - [ ] **`router.go`** - [ ] 将所有 `router.GET`, `router.POST` 等 Gin 路由注册方法替换为 Echo 的 `e.GET`, `e.POST` 等方法。 - [ ] 将 Swagger 路由 `router.GET("/swagger/*", ginSwagger.WrapHandler(swaggerFiles.Handler))` 替换为 @@ -61,14 +65,14 @@ - [ ] 将 `gin.New()` 替换为 `echo.New()`。 - [ ] 将 `engine.Use(gin.Recovery())` 替换为 `e.Use(middleware.Recover())`。 -- [ ] **6. 依赖管理** +- [ ] **7. 依赖管理** - [ ] 在 `go.mod` 中移除 `github.com/gin-gonic/gin`。 - [ ] 在 `go.mod` 中移除 `github.com/swaggo/gin-swagger`。 - [ ] 在 `go.mod` 中添加 `github.com/labstack/echo/v4`。 - [ ] 在 `go.mod` 中添加 `github.com/swaggo/echo-swagger`。 - [ ] 执行 `go mod tidy` 清理依赖项。 -- [ ] **7. 验证** +- [ ] **8. 验证** - [ ] 运行 `go build ./...` 确保项目能够成功编译。 - [ ] 启动服务,手动测试所有 API 端点,验证功能是否与迁移前一致。 - [ ] 访问 `/swagger/index.html`,确认 Swagger UI 是否正常工作。