docs: 新增路由架构设计(模块自包含 + 主路由汇总)
- system-architecture.md: 3.2.1 路由架构(目录结构、调用关系、命名规范) - system-architecture.md: 5.1 更新微服务预留规则(模块自包含路由) - phase1 实施计划: Task 5 更新文件清单和步骤说明 Made-with: Cursor
This commit is contained in:
@@ -97,6 +97,46 @@ EchoChat 采用 **「精简单体 + 媒体微服务」** 架构,核心思想
|
|||||||
|
|
||||||
**不负责的事情:** 不处理 RTP 媒体数据、不参与音视频转发、不做 WebRTC 协议协商。
|
**不负责的事情:** 不处理 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 服务
|
### 3.3 mediasoup Node 服务
|
||||||
|
|
||||||
mediasoup C++ SFU 的 **"遥控器"**,不懂业务、不懂用户、只懂媒体对象。
|
mediasoup C++ SFU 的 **"遥控器"**,不懂业务、不懂用户、只懂媒体对象。
|
||||||
@@ -167,7 +207,8 @@ mediasoup C++ SFU 的 **"遥控器"**,不懂业务、不懂用户、只懂媒
|
|||||||
| 规则 | 说明 |
|
| 规则 | 说明 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| 模块间零直接引用 | `auth` 不会 import `im` 内部代码,通过 interface 通信 |
|
| 模块间零直接引用 | `auth` 不会 import `im` 内部代码,通过 interface 通信 |
|
||||||
| 独立路由注册 | 每个模块有自己的 `router.go`,注册独立的路由组 |
|
| 模块自包含路由 | 每个模块在自己目录内维护 `router.go`,拆分时整目录搬走 |
|
||||||
|
| 主路由仅做汇总 | `router/router.go` 只注册各模块路由,不含具体路由定义 |
|
||||||
| 数据库表按模块前缀 | `auth_users`、`im_messages`、`meeting_rooms`,后期可分库 |
|
| 数据库表按模块前缀 | `auth_users`、`im_messages`、`meeting_rooms`,后期可分库 |
|
||||||
| Redis key 按命名空间 | `echo:auth:*`、`echo:im:*`、`echo:meeting:*` |
|
| Redis key 按命名空间 | `echo:auth:*`、`echo:im:*`、`echo:meeting:*` |
|
||||||
|
|
||||||
|
|||||||
@@ -511,10 +511,13 @@ git commit -m "feat(auth): 认证服务层(注册、登录、JWT、密码加
|
|||||||
**Files:**
|
**Files:**
|
||||||
- Create: `backend/go-service/app/auth/controller/auth_controller.go`
|
- 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/controller/admin_auth_controller.go`
|
||||||
- Create: `backend/go-service/app/auth/router.go`
|
- Create: `backend/go-service/app/auth/router.go` — auth 模块路由定义(模块自包含)
|
||||||
- Modify: `backend/go-service/cmd/server/main.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
|
- Modify: `backend/go-service/app/auth/provider.go` — 添加 Controller Provider
|
||||||
|
|
||||||
|
> **路由架构:** 采用"模块自包含 + 主路由汇总"模式。每个模块在自己目录内的 `router.go` 定义具体路由,`router/router.go` 主路由文件仅做汇总注册,不含具体路由定义。利于后期微服务拆分——整个模块目录搬走即可。
|
||||||
|
|
||||||
**Step 1: 创建前台认证 Controller**
|
**Step 1: 创建前台认证 Controller**
|
||||||
|
|
||||||
创建 `app/auth/controller/auth_controller.go`:
|
创建 `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: 运行验证**
|
**Step 5: 运行验证**
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user