diff --git a/docs/architecture/system-architecture.md b/docs/architecture/system-architecture.md index b6b8c26..5c30610 100644 --- a/docs/architecture/system-architecture.md +++ b/docs/architecture/system-architecture.md @@ -97,6 +97,46 @@ EchoChat 采用 **「精简单体 + 媒体微服务」** 架构,核心思想 **不负责的事情:** 不处理 RTP 媒体数据、不参与音视频转发、不做 WebRTC 协议协商。 +#### 3.2.1 路由架构 + +路由采用 **"模块自包含 + 主路由汇总"** 模式,每个模块在自己的目录内维护路由定义,主路由文件仅做注册汇总。这样设计的核心目的是**利于微服务拆分**——拆分时整个模块目录原封不动搬走即可。 + +**目录结构:** + +``` +router/ +└── router.go ← 主路由入口,只做汇总注册(不含具体路由定义) + +app/auth/router.go ← auth 模块的具体路由定义 +app/admin/router.go ← admin 模块的具体路由定义 +app/im/router.go ← im 模块的具体路由定义(后续阶段) +app/contact/router.go ← contact 模块的具体路由定义(后续阶段) +app/meeting/router.go ← meeting 模块的具体路由定义(后续阶段) +``` + +**调用关系:** + +``` +main.go + └── router.Setup(engine, app) + ├── engine.GET("/health", ...) // 健康检查 + ├── auth.RegisterRoutes(engine, ...) // /api/v1/auth/* + ├── admin.RegisterRoutes(engine, ...) // /api/v1/admin/* + ├── im.RegisterRoutes(engine, ...) // /api/v1/im/* (后续) + ├── contact.RegisterRoutes(engine, ...) // /api/v1/contact/* (后续) + └── meeting.RegisterRoutes(engine, ...) // /api/v1/meeting/* (后续) +``` + +**路由命名规范:** + +| 端 | 路径前缀 | 中间件 | 说明 | +|---|---------|--------|------| +| 前台公开 | `/api/v1/auth/*` | 无 | 注册、登录等不需要认证 | +| 前台认证 | `/api/v1/{module}/*` | JWT 认证 | 需要登录后访问 | +| 管理端 | `/api/v1/admin/{module}/*` | JWT + admin 角色 | 需要管理员权限 | + +**微服务拆分时的变化:** 每个独立服务的 main.go 直接调用自己模块的 `RegisterRoutes`,不再需要主路由汇总文件。 + ### 3.3 mediasoup Node 服务 mediasoup C++ SFU 的 **"遥控器"**,不懂业务、不懂用户、只懂媒体对象。 @@ -167,7 +207,8 @@ mediasoup C++ SFU 的 **"遥控器"**,不懂业务、不懂用户、只懂媒 | 规则 | 说明 | |------|------| | 模块间零直接引用 | `auth` 不会 import `im` 内部代码,通过 interface 通信 | -| 独立路由注册 | 每个模块有自己的 `router.go`,注册独立的路由组 | +| 模块自包含路由 | 每个模块在自己目录内维护 `router.go`,拆分时整目录搬走 | +| 主路由仅做汇总 | `router/router.go` 只注册各模块路由,不含具体路由定义 | | 数据库表按模块前缀 | `auth_users`、`im_messages`、`meeting_rooms`,后期可分库 | | Redis key 按命名空间 | `echo:auth:*`、`echo:im:*`、`echo:meeting:*` | diff --git a/docs/plans/2026-02-27-phase1-foundation-and-auth.md b/docs/plans/2026-02-27-phase1-foundation-and-auth.md index 04f0714..4690a93 100644 --- a/docs/plans/2026-02-27-phase1-foundation-and-auth.md +++ b/docs/plans/2026-02-27-phase1-foundation-and-auth.md @@ -511,10 +511,13 @@ git commit -m "feat(auth): 认证服务层(注册、登录、JWT、密码加 **Files:** - Create: `backend/go-service/app/auth/controller/auth_controller.go` - Create: `backend/go-service/app/auth/controller/admin_auth_controller.go` -- Create: `backend/go-service/app/auth/router.go` -- Modify: `backend/go-service/cmd/server/main.go` — 注册 auth 路由 +- Create: `backend/go-service/app/auth/router.go` — auth 模块路由定义(模块自包含) +- Create: `backend/go-service/router/router.go` — 主路由汇总入口 +- Modify: `backend/go-service/cmd/server/main.go` — 调用 router.Setup() 注册路由 - Modify: `backend/go-service/app/auth/provider.go` — 添加 Controller Provider +> **路由架构:** 采用"模块自包含 + 主路由汇总"模式。每个模块在自己目录内的 `router.go` 定义具体路由,`router/router.go` 主路由文件仅做汇总注册,不含具体路由定义。利于后期微服务拆分——整个模块目录搬走即可。 + **Step 1: 创建前台认证 Controller** 创建 `app/auth/controller/auth_controller.go`: @@ -565,9 +568,15 @@ func RegisterRoutes(r *gin.Engine, ctrl *AuthController, adminCtrl *AdminAuthCon } ``` -**Step 4: 在 main.go 中注册路由** +**Step 4: 创建主路由汇总文件** -修改 `cmd/server/main.go`,初始化 auth 模块的 DAO → Service → Controller 链,调用 RegisterRoutes。 +创建 `router/router.go`: +- `Setup(engine, app)` 函数,负责注册健康检查和调用各模块的 RegisterRoutes +- 不含任何具体路由定义,仅做汇总调度 + +**Step 5: 在 main.go 中调用 router.Setup()** + +修改 `cmd/server/main.go`,将路由注册逻辑移到 `router.Setup()` 调用,main.go 不再直接定义路由。 **Step 5: 运行验证**