refactor:重构安全模块架构,将security模块迁移至core层

- 将src/business/security模块迁移至src/core/security_core
- 更新模块导入路径和依赖关系
- 统一安全相关组件的命名规范(content_type.middleware.ts)
- 清理过时的配置文件和文档
- 更新架构文档以反映新的模块结构

此次重构符合业务功能模块化架构设计原则,将技术基础设施
服务统一放置在core层,提高代码组织的清晰度和可维护性。
This commit is contained in:
moyin
2026-01-04 19:34:16 +08:00
parent 67ade48ad7
commit 70c020a97c
25 changed files with 174 additions and 1215 deletions

View File

@@ -1,257 +0,0 @@
# API 状态码说明
## 📊 概述
本文档说明了项目中使用的 HTTP 状态码,特别是针对邮件发送功能的特殊状态码处理。
## 🔢 标准状态码
| 状态码 | 含义 | 使用场景 |
|--------|------|----------|
| 200 | OK | 请求成功 |
| 201 | Created | 资源创建成功(如用户注册) |
| 400 | Bad Request | 请求参数错误 |
| 401 | Unauthorized | 未授权(如密码错误) |
| 403 | Forbidden | 权限不足 |
| 404 | Not Found | 资源不存在 |
| 409 | Conflict | 资源冲突(如用户名已存在) |
| 429 | Too Many Requests | 请求频率过高 |
| 500 | Internal Server Error | 服务器内部错误 |
## 🎯 特殊状态码
### 206 Partial Content - 测试模式
**使用场景:** 邮件发送功能在测试模式下使用
**含义:** 请求部分成功,但未完全达到预期效果
**具体应用:**
- 验证码已生成,但邮件未真实发送
- 功能正常工作,但处于测试/开发模式
- 用户可以获得验证码进行测试,但需要知道这不是真实发送
**响应示例:**
```json
{
"success": false,
"data": {
"verification_code": "123456",
"is_test_mode": true
},
"message": "⚠️ 测试模式:验证码已生成但未真实发送。请在控制台查看验证码,或配置邮件服务以启用真实发送。",
"error_code": "TEST_MODE_ONLY"
}
```
## 📧 邮件发送接口状态码
### 发送邮箱验证码 - POST /auth/send-email-verification
| 状态码 | 场景 | 响应 |
|--------|------|------|
| 200 | 邮件真实发送成功 | `{ "success": true, "message": "验证码已发送,请查收邮件" }` |
| 206 | 测试模式 | `{ "success": false, "error_code": "TEST_MODE_ONLY", "data": { "verification_code": "123456", "is_test_mode": true } }` |
| 400 | 参数错误 | `{ "success": false, "message": "邮箱格式错误" }` |
| 429 | 发送频率过高 | `{ "success": false, "message": "发送频率过高,请稍后重试" }` |
### 发送密码重置验证码 - POST /auth/forgot-password
| 状态码 | 场景 | 响应 |
|--------|------|------|
| 200 | 邮件真实发送成功 | `{ "success": true, "message": "验证码已发送,请查收" }` |
| 206 | 测试模式 | `{ "success": false, "error_code": "TEST_MODE_ONLY", "data": { "verification_code": "123456", "is_test_mode": true } }` |
| 400 | 参数错误 | `{ "success": false, "message": "邮箱格式错误" }` |
| 404 | 用户不存在 | `{ "success": false, "message": "用户不存在" }` |
### 重新发送邮箱验证码 - POST /auth/resend-email-verification
| 状态码 | 场景 | 响应 |
|--------|------|------|
| 200 | 邮件真实发送成功 | `{ "success": true, "message": "验证码已重新发送,请查收邮件" }` |
| 206 | 测试模式 | `{ "success": false, "error_code": "TEST_MODE_ONLY", "data": { "verification_code": "123456", "is_test_mode": true } }` |
| 400 | 邮箱已验证或用户不存在 | `{ "success": false, "message": "邮箱已验证,无需重复验证" }` |
| 429 | 发送频率过高 | `{ "success": false, "message": "发送频率过高,请稍后重试" }` |
## 🔄 模式切换
### 测试模式 → 真实发送模式
**配置前(测试模式):**
```bash
curl -X POST http://localhost:3000/auth/send-email-verification \
-H "Content-Type: application/json" \
-d '{"email": "test@example.com"}'
# 响应206 Partial Content
{
"success": false,
"data": {
"verification_code": "123456",
"is_test_mode": true
},
"message": "⚠️ 测试模式:验证码已生成但未真实发送...",
"error_code": "TEST_MODE_ONLY"
}
```
**配置后(真实发送模式):**
```bash
# 同样的请求
curl -X POST http://localhost:3000/auth/send-email-verification \
-H "Content-Type: application/json" \
-d '{"email": "test@example.com"}'
# 响应200 OK
{
"success": true,
"data": {
"is_test_mode": false
},
"message": "验证码已发送,请查收邮件"
}
```
## 💡 前端处理建议
### JavaScript 示例
```javascript
async function sendEmailVerification(email) {
try {
const response = await fetch('/auth/send-email-verification', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ email }),
});
const data = await response.json();
if (response.status === 200) {
// 真实发送成功
showSuccess('验证码已发送,请查收邮件');
} else if (response.status === 206) {
// 测试模式
showWarning(`测试模式:验证码是 ${data.data.verification_code}`);
showInfo('请配置邮件服务以启用真实发送');
} else {
// 其他错误
showError(data.message);
}
} catch (error) {
showError('网络错误,请稍后重试');
}
}
```
### React 示例
```jsx
const handleSendVerification = async (email) => {
try {
const response = await fetch('/auth/send-email-verification', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email }),
});
const data = await response.json();
switch (response.status) {
case 200:
setMessage({ type: 'success', text: '验证码已发送,请查收邮件' });
break;
case 206:
setMessage({
type: 'warning',
text: `测试模式:验证码是 ${data.data.verification_code}`
});
setShowConfigTip(true);
break;
case 400:
setMessage({ type: 'error', text: data.message });
break;
case 429:
setMessage({ type: 'error', text: '发送频率过高,请稍后重试' });
break;
default:
setMessage({ type: 'error', text: '发送失败,请稍后重试' });
}
} catch (error) {
setMessage({ type: 'error', text: '网络错误,请稍后重试' });
}
};
```
## 🎨 UI 展示建议
### 测试模式提示
```html
<!-- 成功状态 (200) -->
<div class="alert alert-success">
✅ 验证码已发送,请查收邮件
</div>
<!-- 测试模式 (206) -->
<div class="alert alert-warning">
⚠️ 测试模式:验证码是 123456
<br>
<small>请配置邮件服务以启用真实发送</small>
</div>
<!-- 错误状态 (400+) -->
<div class="alert alert-danger">
❌ 发送失败:邮箱格式错误
</div>
```
## 📝 开发建议
### 1. 状态码检查
```javascript
// 推荐:明确检查状态码
if (response.status === 206) {
// 处理测试模式
} else if (response.status === 200) {
// 处理真实发送
}
// 不推荐:只检查 success 字段
if (data.success) {
// 可能遗漏测试模式的情况
}
```
### 2. 错误处理
```javascript
// 推荐:根据 error_code 进行精确处理
switch (data.error_code) {
case 'TEST_MODE_ONLY':
handleTestMode(data);
break;
case 'SEND_CODE_FAILED':
handleSendFailure(data);
break;
default:
handleGenericError(data);
}
```
### 3. 用户体验
- **测试模式**:清晰提示用户当前处于测试模式
- **配置引导**:提供配置邮件服务的链接或说明
- **验证码显示**:在测试模式下直接显示验证码
- **状态区分**:用不同的颜色和图标区分不同状态
## 🔗 相关文档
- [邮件服务配置指南](./EMAIL_CONFIGURATION.md)
- [快速启动指南](./QUICK_START.md)
- [API 文档](./api/README.md)

View File

@@ -25,6 +25,29 @@ Whale Town 采用**业务功能模块化架构**,将代码按业务功能而
- **模块化设计** - 每个模块独立完整,可单独测试和部署
- **配置驱动** - 通过环境变量控制运行模式和行为
### 🛠️ 技术栈
#### 后端技术栈
- **框架**: NestJS 11.x (基于Express)
- **语言**: TypeScript 5.x
- **数据库**: MySQL + TypeORM (生产) / 内存数据库 (开发)
- **缓存**: Redis + IORedis (生产) / 文件存储 (开发)
- **认证**: JWT + bcrypt
- **验证**: class-validator + class-transformer
- **文档**: Swagger/OpenAPI
- **测试**: Jest + Supertest
- **日志**: Pino + nestjs-pino
- **WebSocket**: Socket.IO
- **邮件**: Nodemailer
- **集成**: Zulip API
#### 前端技术栈
- **框架**: React 18.x
- **构建工具**: Vite 7.x
- **UI库**: Ant Design 5.x
- **路由**: React Router DOM 6.x
- **语言**: TypeScript 5.x
### 📊 整体架构图
```
@@ -40,11 +63,11 @@ Whale Town 采用**业务功能模块化架构**,将代码按业务功能而
│ 🎯 业务功能模块层 │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 🔐 用户认证 │ │ 👥 用户管理 │ │ 🛡️ 管理员 │ │
│ │ (auth) │ │ (user-mgmt) │ │ (admin) │ │
│ │ (auth) │ │ (user_mgmt) │ │ (admin) │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 🔒 安全防护 │ │ 💬 Zulip集成 │ │ 🔗 共享组件 │ │
│ │ (security) │ │ (zulip) │ │ (shared) │ │
│ │ 💬 Zulip集成 │ │ 🔗 共享组件 │ │ │
│ │ (zulip) │ │ (shared) │ │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
⬇️
@@ -52,11 +75,11 @@ Whale Town 采用**业务功能模块化架构**,将代码按业务功能而
│ ⚙️ 核心技术服务层 │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 🔑 登录核心 │ │ 👑 管理员核心 │ │ 💬 Zulip核心 │ │
│ │ (login_core) │ │ (admin_core) │ │ (zulip) │ │
│ │ (auth_core) │ │ (admin_core) │ │ (zulip) │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 🛠 工具服务 │ │ 📧 邮件服务 │ │ 📝 日志服务 │ │
│ │ (utils) │ │ (email) │ │ (logger) │
│ │ 🛡 安全核心 │ │ 🛠️ 工具服务 │ │ 📧 邮件服务 │ │
│ │ (security_core)│ │ (utils) │ │ (email) │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
⬇️
@@ -80,56 +103,50 @@ Whale Town 采用**业务功能模块化架构**,将代码按业务功能而
```
src/business/
├── 📂 auth/ # 🔐 用户认证模块
│ ├── 📄 auth.controller.ts # HTTP接口控制器
│ ├── 📄 auth.service.ts # 业务逻辑服务
│ ├── 📄 auth.module.ts # 模块定义
│ ├── 📂 controllers/ # 控制器
│ │ └── 📄 login.controller.ts # 登录接口控制器
│ ├── 📂 services/ # 业务服务
│ │ ├── 📄 login.service.ts # 登录业务逻辑
│ │ └── 📄 login.service.spec.ts # 登录服务测试
│ ├── 📂 dto/ # 数据传输对象
│ │ ├── 📄 login.dto.ts # 登录请求DTO
│ │ ── 📄 register.dto.ts # 注册请求DTO
│ └── 📄 reset-password.dto.ts # 重置密码DTO
│ └── 📂 __tests__/ # 单元测试
│ └── 📄 auth.service.spec.ts
│ │ ── 📄 login_response.dto.ts # 登录响应DTO
│ └── 📂 guards/ # 权限守卫(预留)
├── 📂 user-mgmt/ # 👥 用户管理模块
│ ├── 📄 user-mgmt.controller.ts # 用户管理接口
│ ├── 📄 user-mgmt.service.ts # 用户状态管理逻辑
│ ├── 📄 user-mgmt.module.ts # 模块定义
│ ├── 📂 controllers/ # 控制器
│ │ └── 📄 user-status.controller.ts # 用户状态管理接口
│ ├── 📂 services/ # 业务服务
│ │ └── 📄 user-management.service.ts # 用户管理逻辑
│ ├── 📂 dto/ # 数据传输对象
│ │ ├── 📄 update-status.dto.ts # 状态更新DTO
│ │ └── 📄 batch-status.dto.ts # 批量操作DTO
── 📂 enums/ # 枚举定义
└── 📄 user-status.enum.ts # 用户状态枚举
│ │ ├── 📄 user-status.dto.ts # 用户状态DTO
│ │ └── 📄 user-status-response.dto.ts # 状态响应DTO
── 📂 enums/ # 枚举定义
└── 📄 user-status.enum.ts # 用户状态枚举
│ └── 📂 tests/ # 测试文件(预留)
├── 📂 admin/ # 🛡️ 管理员模块
│ ├── 📄 admin.controller.ts # 管理员接口
│ ├── 📄 admin.service.ts # 管理员业务逻辑
│ ├── 📄 admin.module.ts # 模块定义
│ ├── 📄 admin.service.spec.ts # 管理员服务测试
│ ├── 📂 dto/ # 数据传输对象
│ └── 📂 guards/ # 权限守卫
│ └── 📄 admin.guard.ts # 管理员权限验证
├── 📂 security/ # 🔒 安全防护模块
│ ├── 📄 security.module.ts # 安全模块定义
│ ├── 📂 guards/ # 安全守卫
│ │ ├── 📄 throttle.guard.ts # 频率限制守卫
│ │ ├── 📄 maintenance.guard.ts # 维护模式守卫
│ │ └── 📄 content-type.guard.ts # 内容类型守卫
│ └── 📂 interceptors/ # 拦截器
│ └── 📄 timeout.interceptor.ts # 超时拦截器
├── 📂 zulip/ # 💬 Zulip集成模块
│ ├── 📄 zulip.service.ts # Zulip业务服务
│ ├── 📄 zulip_websocket.gateway.ts # WebSocket网关
│ ├── 📄 zulip.module.ts # 模块定义
│ ├── 📂 interfaces/ # 接口定义
│ └── 📂 services/ # 子服务
│ ├── 📄 message_filter.service.ts # 消息过滤
│ └── 📄 session_cleanup.service.ts # 会话清理
└── 📂 shared/ # 🔗 共享业务组件
├── 📂 decorators/ # 装饰器
── 📂 pipes/ # 管道
├── 📂 filters/ # 异常过滤器
└── 📂 interfaces/ # 接口定义
├── 📂 dto/ # 共享数据传输对象
── 📄 index.ts # 导出文件
```
### ⚙️ 核心技术服务 (`src/core/`)
@@ -139,72 +156,84 @@ src/business/
```
src/core/
├── 📂 db/ # 🗄️ 数据库层
── 📄 db.module.ts # 数据库模块
│ ├── 📂 users/ # 用户数据服务
├── 📄 users.service.ts # MySQL数据库实现
├── 📄 users-memory.service.ts # 内存数据库实现
├── 📄 users.interface.ts # 用户服务接口
── 📄 user.entity.ts # 用户实体定义
└── 📂 entities/ # 数据库实体
│ └── 📄 *.entity.ts # 各种实体定义
── 📂 users/ # 用户数据服务
├── 📄 users.service.ts # MySQL数据库实现
├── 📄 users_memory.service.ts # 内存数据库实现
├── 📄 users.dto.ts # 用户数据传输对象
├── 📄 users.entity.ts # 用户实体定义
── 📄 users.module.ts # 用户数据模块
└── 📄 users.service.spec.ts # 用户服务测试
├── 📂 redis/ # 🔴 Redis缓存层
│ ├── 📄 redis.module.ts # Redis模块
│ ├── 📄 redis.service.ts # Redis真实实现
│ ├── 📄 real-redis.service.ts # Redis真实实现
│ ├── 📄 file-redis.service.ts # 文件存储实现
│ └── 📄 redis.interface.ts # Redis服务接口
├── 📂 login_core/ # 🔑 登录核心服务
│ ├── 📄 login-core.service.ts # 登录核心逻辑
│ ├── 📄 login-core.module.ts # 模块定义
│ └── 📄 login-core.interface.ts # 接口定义
│ ├── 📄 login_core.service.ts # 登录核心逻辑
│ ├── 📄 login_core.module.ts # 模块定义
│ └── 📄 login_core.service.spec.ts # 登录核心测试
├── 📂 admin_core/ # 👑 管理员核心服务
│ ├── 📄 admin-core.service.ts # 管理员核心逻辑
│ ├── 📄 admin-core.module.ts # 模块定义
│ └── 📄 admin-core.interface.ts # 接口定义
│ ├── 📄 admin_core.service.ts # 管理员核心逻辑
│ ├── 📄 admin_core.module.ts # 模块定义
│ └── 📄 admin_core.service.spec.ts # 管理员核心测试
├── 📂 zulip/ # 💬 Zulip核心服务
│ ├── 📄 zulip-core.module.ts # Zulip核心模块
│ ├── 📄 zulip-api.service.ts # Zulip API服务
── 📄 zulip-websocket.service.ts # WebSocket服务
│ ├── 📂 config/ # 配置文件
── 📂 interfaces/ # 接口定义
│ ├── 📂 services/ # 核心服务
│ ├── 📂 types/ # 类型定义
│ └── 📄 index.ts # 导出文件
├── 📂 security_core/ # 🛡️ 安全核心模块
│ ├── 📄 security_core.module.ts # 安全模块定义
│ ├── 📂 guards/ # 安全守卫
│ │ └── 📄 throttle.guard.ts # 频率限制守卫
│ ├── 📂 interceptors/ # 拦截器
│ │ └── 📄 timeout.interceptor.ts # 超时拦截器
│ ├── 📂 middleware/ # 中间件
│ │ ├── 📄 maintenance.middleware.ts # 维护模式中间件
│ │ └── 📄 content_type.middleware.ts # 内容类型中间件
│ └── 📂 decorators/ # 装饰器
│ ├── 📄 throttle.decorator.ts # 频率限制装饰器
│ └── 📄 timeout.decorator.ts # 超时装饰器
└── 📂 utils/ # 🛠️ 工具服务
├── 📂 email/ # 📧 邮件服务
│ ├── 📄 email.service.ts # 邮件发送服务
│ ├── 📄 email.module.ts # 邮件模块
│ └── 📄 email.interface.ts # 邮件接口
│ └── 📄 email.service.spec.ts # 邮件服务测试
├── 📂 verification/ # 🔢 验证码服务
│ ├── 📄 verification.service.ts # 验证码生成验证
── 📄 verification.module.ts # 验证码模块
── 📄 verification.module.ts # 验证码模块
│ └── 📄 verification.service.spec.ts # 验证码服务测试
└── 📂 logger/ # 📝 日志服务
├── 📄 logger.service.ts # 日志记录服务
── 📄 logger.module.ts # 日志模块
── 📄 logger.module.ts # 日志模块
├── 📄 logger.config.ts # 日志配置
└── 📄 log_management.service.ts # 日志管理服务
```
### 🎨 前端管理界面 (`client/`)
> **设计原则**: 独立的前端项目,提供管理员后台功能
> **设计原则**: 独立的前端项目,提供管理员后台功能基于React + Vite + Ant Design
```
client/
├── 📂 src/ # 前端源码
│ ├── 📂 components/ # 用组件
│ │ ├── 📄 Layout.tsx # 布局组件
│ │ ── 📄 UserTable.tsx # 用户表格组件
│ │ └── 📄 LogViewer.tsx # 日志查看组件
│ ├── 📂 app/ # 用组件
│ │ ├── 📄 App.tsx # 应用主组件
│ │ ── 📄 AdminLayout.tsx # 管理员布局组件
│ ├── 📂 pages/ # 页面组件
│ │ ├── 📄 Login.tsx # 登录页面
│ │ ├── 📄 Dashboard.tsx # 仪表板
│ │ ── 📄 UserManagement.tsx # 用户管理
│ └── 📄 LogManagement.tsx # 日志管理
│ ├── 📂 services/ # API服务
│ │ ├── 📄 LoginPage.tsx # 登录页面
│ │ ├── 📄 UsersPage.tsx # 用户管理页面
│ │ ── 📄 LogsPage.tsx # 日志管理页面
├── 📂 lib/ # 工具库
│ │ ├── 📄 api.ts # API客户端
│ │ ── 📄 auth.ts # 认证服务
│ │ └── 📄 users.ts # 用户服务
│ ├── 📂 utils/ # 工具函数
│ ├── 📂 types/ # TypeScript类型
│ ├── 📄 App.tsx # 应用主组件
│ │ ── 📄 adminAuth.ts # 管理员认证服务
│ └── 📄 main.tsx # 应用入口
├── 📂 dist/ # 构建产物
├── 📄 package.json # 前端依赖
@@ -220,21 +249,17 @@ client/
docs/
├── 📄 README.md # 📖 文档导航中心
├── 📄 ARCHITECTURE.md # 🏗️ 架构设计文档
├── 📄 API_STATUS_CODES.md # 📋 API状态码说明
├── 📄 CONTRIBUTORS.md # 🤝 贡献者指南
├── 📂 api/ # 🔌 API接口文档
│ ├── 📄 README.md # API文档使用指南
── 📄 api-documentation.md # 完整API接口文档
│ ├── 📄 openapi.yaml # OpenAPI规范文件
│ └── 📄 postman-collection.json # Postman测试集合
── 📄 api-documentation.md # 完整API接口文档
├── 📂 development/ # 💻 开发指南
│ ├── 📄 backend_development_guide.md # 后端开发规范
│ ├── 📄 git_commit_guide.md # Git提交规范
│ ├── 📄 AI辅助开发规范指南.md # AI辅助开发指南
── 📄 TESTING.md # 测试指南
│ └── 📄 naming_convention.md # 命名规范
── 📄 TESTING.md # 测试指南
└── 📂 deployment/ # 🚀 部署文档
└── 📄 DEPLOYMENT.md # 生产环境部署指南
@@ -261,14 +286,17 @@ test/
├── 📄 .env # 🔧 环境变量配置
├── 📄 .env.example # 🔧 环境变量示例
├── 📄 .env.production.example # 🔧 生产环境示例
├── 📄 package.json # 📋 项目依赖配置
├── 📄 package.json # 📋 后端项目依赖配置
├── 📄 pnpm-workspace.yaml # 📦 pnpm工作空间配置
├── 📄 tsconfig.json # 📘 TypeScript配置
├── 📄 jest.config.js # 🧪 Jest测试配置
├── 📄 nest-cli.json # 🏠 NestJS CLI配置
├── 📄 docker-compose.yml # 🐳 Docker编排配置
├── 📄 Dockerfile # 🐳 Docker镜像配置
└── 📄 ecosystem.config.js # 🚀 PM2进程管理配置
client/
├── 📄 package.json # 📋 前端项目依赖配置
├── 📄 vite.config.ts # ⚡ Vite构建配置
└── 📄 tsconfig.json # 📘 前端TypeScript配置
```
---
@@ -327,18 +355,17 @@ test/
### 🔄 数据流向
#### 用户注册流程示例
#### 用户登录流程示例
```
1. 📱 用户请求 → AuthController.register()
1. 📱 用户请求 → LoginController.login()
2. 🔍 参数验证 → class-validator装饰器
3. 🎯 业务逻辑 → AuthService.register()
4. ⚙️ 核心服务 → LoginCoreService.createUser()
5. 📧 发送邮件 → EmailService.sendVerificationCode()
6. 🔢 生成验证码 → VerificationService.generate()
7. 💾 存储数据 → UsersService.create() + RedisService.set()
8. 📝 记录日志 → LoggerService.log()
9. ✅ 返回响应 → 用户收到成功响应
3. 🎯 业务逻辑 → LoginService.login()
4. ⚙️ 核心服务 → LoginCoreService.validateUser()
5. 📧 发送验证码 → VerificationService.generate()
6. 💾 存储数据 → UsersService.findByEmail() + RedisService.set()
7. 📝 记录日志 → LoggerService.log()
8. ✅ 返回响应 → 用户收到登录结果
```
#### 管理员操作流程示例
@@ -369,7 +396,7 @@ test/
| 功能模块 | 🧪 开发测试模式 | 🚀 生产部署模式 |
|----------|----------------|----------------|
| **数据库** | 内存存储 (UsersMemoryService) | MySQL (UsersService + TypeORM) |
| **缓存** | 文件存储 (FileRedisService) | Redis (RedisService + IORedis) |
| **缓存** | 文件存储 (FileRedisService) | Redis (RealRedisService + IORedis) |
| **邮件** | 控制台输出 (测试模式) | SMTP服务器 (生产模式) |
| **日志** | 控制台 + 文件 | 结构化日志 + 日志轮转 |
| **配置** | `.env` 默认配置 | 环境变量 + 配置中心 |
@@ -431,7 +458,7 @@ EMAIL_PASS=your_app_password
const useFileRedis = configService.get<boolean>('USE_FILE_REDIS');
return useFileRedis
? new FileRedisService()
: new RedisService(configService);
: new RealRedisService(configService);
},
inject: [ConfigService],
},
@@ -471,7 +498,7 @@ AppModule (应用主模块)
├── 📊 ConfigModule (全局配置)
├── 📝 LoggerModule (日志系统)
├── 🔴 RedisModule (缓存服务)
│ ├── RedisService (真实Redis)
│ ├── RealRedisService (真实Redis)
│ └── FileRedisService (文件存储)
├── 🗄️ UsersModule (用户数据)
│ ├── UsersService (MySQL数据库)
@@ -481,16 +508,15 @@ AppModule (应用主模块)
├── 🔑 LoginCoreModule (登录核心)
├── 👑 AdminCoreModule (管理员核心)
├── 💬 ZulipCoreModule (Zulip核心)
├── 🔒 SecurityCoreModule (安全核心)
├── 🎯 业务功能模块
│ ├── 🔐 AuthModule (用户认证)
│ │ └── 依赖: LoginCoreModule, EmailModule, VerificationModule
│ │ └── 依赖: LoginCoreModule, EmailModule, VerificationModule, SecurityCoreModule
│ ├── 👥 UserMgmtModule (用户管理)
│ │ └── 依赖: UsersModule, LoggerModule
│ │ └── 依赖: UsersModule, LoggerModule, SecurityCoreModule
│ ├── 🛡️ AdminModule (管理员)
│ │ └── 依赖: AdminCoreModule, UsersModule
│ ├── 🔒 SecurityModule (安全防护)
│ │ └── 依赖: RedisModule, LoggerModule
│ │ └── 依赖: AdminCoreModule, UsersModule, SecurityCoreModule
│ ├── 💬 ZulipModule (Zulip集成)
│ │ └── 依赖: ZulipCoreModule, RedisModule
│ └── 🔗 SharedModule (共享组件)
@@ -500,7 +526,7 @@ AppModule (应用主模块)
#### 用户认证流程
```
AuthController → AuthService → LoginCoreService
AuthController → LoginService → LoginCoreService
EmailService ← VerificationService ← RedisService

View File

@@ -1,142 +0,0 @@
# 📝 文档清理说明
> 记录项目文档整理和优化的过程,确保文档结构清晰、内容准确。
## 🎯 清理目标
- **删除多余README** - 移除重复和过时的README文件
- **优化主文档** - 改进项目主README的文件格式和结构说明
- **完善架构文档** - 详细说明项目架构和文件夹组织结构
- **统一文档风格** - 采用总分结构,方便开发者理解
## 📊 文档清理结果
### ✅ 保留的README文件
| 文件路径 | 保留原因 | 主要内容 |
|----------|----------|----------|
| `README.md` | 项目主文档 | 项目介绍、快速开始、技术栈、功能特性 |
| `docs/README.md` | 文档导航中心 | 文档结构说明、导航链接 |
| `client/README.md` | 前端项目文档 | 前端管理界面的独立说明 |
| `docs/api/README.md` | API文档指南 | API文档使用说明和快速测试 |
| `src/business/zulip/README.md` | 模块架构说明 | Zulip模块重构的详细说明 |
### ❌ 删除的README文件
**无** - 经过分析所有现有README文件都有其存在价值未删除任何文件。
### 🔄 优化的文档
#### 1. 主README.md优化
- **文件结构总览** - 添加了详细的项目文件结构说明
- **图标化展示** - 使用emoji图标让结构更直观
- **层次化组织** - 按照总分结构组织内容
#### 2. 架构文档大幅改进 (docs/ARCHITECTURE.md)
- **完整重写** - 从简单的架构图扩展为完整的架构设计文档
- **目录结构详解** - 详细说明每个文件夹的作用和内容
- **分层架构设计** - 清晰的架构分层和模块依赖关系
- **双模式架构** - 详细说明开发测试模式和生产部署模式
- **扩展指南** - 提供添加新模块和功能的详细指导
## 📁 文档结构优化
### 🎯 总分结构设计
采用**总分结构**组织文档,便于开发者快速理解:
```
📚 文档层次结构
├── 🏠 项目总览 (README.md)
│ ├── 🎯 项目简介和特性
│ ├── 🚀 快速开始指南
│ ├── 📁 文件结构总览 ⭐ 新增
│ ├── 🛠️ 技术栈说明
│ └── 📚 文档导航链接
├── 🏗️ 架构设计 (docs/ARCHITECTURE.md) ⭐ 大幅改进
│ ├── 📊 整体架构图
│ ├── 📁 目录结构详解
│ ├── 🏗️ 分层架构设计
│ ├── 🔄 双模式架构
│ └── 🚀 扩展指南
├── 📖 文档中心 (docs/README.md)
│ ├── 📋 文档导航
│ ├── 🏗️ 文档结构说明
│ └── 📝 文档维护原则
├── 🔌 API文档 (docs/api/README.md)
│ ├── 📊 API接口概览
│ ├── 🚀 快速开始
│ └── 🧪 测试指南
└── 🎨 前端文档 (client/README.md)
├── 🚀 快速开始
├── 🎯 核心功能
└── 🔧 开发指南
```
### 📊 文档内容优化
#### 1. 视觉化改进
- **emoji图标** - 使用统一的emoji图标系统
- **表格展示** - 用表格清晰展示对比信息
- **代码示例** - 提供完整的代码示例和配置
- **架构图** - 使用ASCII艺术绘制清晰的架构图
#### 2. 结构化内容
- **目录导航** - 每个长文档都有详细目录
- **分层说明** - 按照业务功能模块化的原则组织
- **实用指南** - 提供具体的操作步骤和扩展指南
#### 3. 开发者友好
- **快速上手** - 新开发者指南,从规范学习到架构理解
- **总分结构** - 先总览后详细,便于快速理解
- **实际案例** - 提供真实的代码示例和使用场景
## 🎯 文档维护原则
### ✅ 保留标准
- **长期价值** - 对整个项目生命周期都有价值
- **参考价值** - 开发、部署、维护时需要查阅
- **规范指导** - 团队协作和代码质量保证
### ❌ 清理标准
- **阶段性文档** - 只在特定开发阶段有用
- **临时记录** - 会议记录、临时决策等
- **过时信息** - 已经不适用的旧版本文档
### 🔄 更新策略
- **及时更新** - 功能变更时同步更新相关文档
- **版本控制** - 重要变更记录版本历史
- **定期审查** - 定期检查文档的准确性和有效性
## 📈 改进效果
### 🎯 开发者体验提升
- **快速理解** - 通过总分结构快速掌握项目架构
- **准确信息** - 文档与实际代码结构完全一致
- **实用指导** - 提供具体的开发和扩展指南
### 📚 文档质量提升
- **结构清晰** - 层次分明的文档组织结构
- **内容完整** - 覆盖项目的所有重要方面
- **易于维护** - 明确的维护原则和更新策略
### 🚀 项目可维护性提升
- **架构清晰** - 详细的架构文档便于理解和扩展
- **规范统一** - 统一的文档风格和组织原则
- **知识传承** - 完整的文档体系便于团队协作
---
**📝 通过系统性的文档清理和优化,项目文档现在更加清晰、准确、实用!**
## 📅 清理记录
- **清理时间**: 2025年12月31日
- **清理范围**: 项目根目录及所有子目录的README文件
- **主要改进**: 架构文档完全重写主README结构优化
- **保留文件**: 5个README文件全部保留
- **删除文件**: 0个所有文件都有价值