docs: 新增路由架构设计(模块自包含 + 主路由汇总)

- system-architecture.md: 3.2.1 路由架构(目录结构、调用关系、命名规范)
- system-architecture.md: 5.1 更新微服务预留规则(模块自包含路由)
- phase1 实施计划: Task 5 更新文件清单和步骤说明

Made-with: Cursor
This commit is contained in:
bujinyuan
2026-02-28 15:31:46 +08:00
parent 028cca8695
commit 2d9bc10c6d
2 changed files with 55 additions and 5 deletions

View File

@@ -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:*` |

View File

@@ -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: 运行验证**