first commit

This commit is contained in:
2026-03-30 16:55:04 +08:00
commit 8d04a0fd6e
133 changed files with 11587 additions and 0 deletions

View File

@@ -0,0 +1,90 @@
# 项目概览
## 1. 项目简介
Crawlful Hub 是一个基于 Spring Boot 3.x 的后端服务,用于管理商品、订单、支付、物流等业务流程。本项目是从原有的 Node.js 后端平移而来,保持了与原系统的 API 兼容性,同时提供了更强大的性能和可扩展性。
## 2. 技术栈
- **框架**: Spring Boot 3.2.0
- **语言**: Java 17
- **数据库**: MySQL 8.0
- **缓存**: Redis
- **认证**: JWT
- **构建工具**: Maven
- **API 文档**: Springdoc OpenAPI
- **日志系统**: Logback
- **测试**: JUnit 5
## 3. 核心功能
- **用户认证与授权**: 基于 JWT 的身份验证和基于角色的访问控制
- **商品管理**: 商品的创建、查询、更新和删除
- **订单管理**: 订单的创建、查询、更新和状态管理
- **支付管理**: 支付的创建、查询、更新和状态管理
- **物流管理**: 物流的创建、查询、更新和状态管理
- **系统监控**: 系统健康状态、性能指标、服务状态等
- **告警管理**: 系统告警的创建、查询、更新和处理
- **审计日志**: 系统操作的审计记录
- **配置管理**: 系统配置的管理
- **数据管理**: 数据的导入、导出和处理
- **报表生成**: 系统报表的生成
## 4. 项目结构
```
serverjava/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── crawlful/
│ │ │ └── hub/
│ │ │ ├── api/ # API 控制器
│ │ │ ├── config/ # 系统配置
│ │ │ ├── exception/ # 异常处理
│ │ │ ├── model/ # 数据模型
│ │ │ ├── service/ # 业务逻辑
│ │ │ ├── util/ # 工具类
│ │ │ └── Application.java # 应用入口
│ │ └── resources/
│ │ ├── db/ # 数据库迁移脚本
│ │ ├── i18n/ # 国际化资源
│ │ ├── application.yml # 应用配置
│ │ └── logback.xml # 日志配置
│ └── test/ # 测试代码
├── docs/ # 项目文档
├── README.md # 项目说明
├── index.md # 项目索引
└── pom.xml # Maven 配置
```
## 5. API 兼容性
本项目保持了与原 Node.js 后端的 API 兼容性确保前端和客户端代码无需修改即可正常工作。API 路径、参数和返回格式都与原系统保持一致。
## 6. 性能优化
- **数据库连接池**: 使用 HikariCP 优化数据库连接管理
- **缓存**: 使用 Redis 缓存高频访问数据
- **分页查询**: 实现分页查询,避免一次性加载大量数据
- **索引优化**: 为数据库表添加适当的索引,提高查询性能
## 7. 安全增强
- **CSRF 保护**: 实现 CSRF 令牌验证
- **速率限制**: 限制 API 请求频率,防止恶意请求
- **密码加密**: 使用 BCrypt 加密用户密码
- **JWT 认证**: 使用 JWT 进行身份验证,确保 API 安全
## 8. 国际化支持
本项目支持国际化,提供了英文和中文的资源文件,可以根据请求的 Accept-Language 头自动切换语言。
## 9. 监控与告警
本项目实现了系统监控和告警功能,可以实时监控系统的健康状态、性能指标和服务状态,并在异常情况下生成告警。
## 10. 部署与运维
本项目使用 Maven 构建,可以部署到任何支持 Java 17 的环境中。详细的部署方法请参考部署文档。

View File

@@ -0,0 +1,181 @@
# 架构设计
## 1. 架构概述
Crawlful Hub 采用分层架构设计,确保系统的可维护性、可扩展性和可测试性。系统分为控制器层、服务层、仓库层和模型层,各层之间通过依赖注入进行解耦,实现了高内聚、低耦合的设计目标。
## 2. 分层架构
### 2.1 控制器层Controller
控制器层负责处理 HTTP 请求,包括请求参数的验证、调用服务层的方法、处理异常和返回响应。控制器层不包含业务逻辑,只负责请求和响应的处理。
**主要职责**
- 接收 HTTP 请求
- 验证请求参数
- 调用服务层处理业务逻辑
- 处理异常
- 返回 HTTP 响应
**核心控制器**
- `AuthController`:处理认证相关的请求
- `UserController`:处理用户管理相关的请求
- `ProductController`:处理商品管理相关的请求
- `OrderController`:处理订单管理相关的请求
- `PaymentController`:处理支付管理相关的请求
- `LogisticsController`:处理物流管理相关的请求
- `MonitoringController`:处理监控相关的请求
- `AlertController`:处理告警相关的请求
- `AuditController`:处理审计相关的请求
- `ConfigController`:处理配置相关的请求
- `DataController`:处理数据相关的请求
- `ReportController`:处理报表相关的请求
### 2.2 服务层Service
服务层是业务逻辑的核心,负责实现业务规则、处理业务流程和协调多个仓库的操作。服务层通过依赖注入使用仓库层的方法,实现业务逻辑的封装和复用。
**主要职责**
- 实现业务逻辑
- 处理业务流程
- 协调多个仓库的操作
- 管理事务
- 处理异常
**核心服务**
- `AuthService`:处理认证相关的业务逻辑
- `UserService`:处理用户管理相关的业务逻辑
- `ProductService`:处理商品管理相关的业务逻辑
- `OrderService`:处理订单管理相关的业务逻辑
- `PaymentService`:处理支付管理相关的业务逻辑
- `LogisticsService`:处理物流管理相关的业务逻辑
- `MonitoringService`:处理监控相关的业务逻辑
- `AlertService`:处理告警相关的业务逻辑
- `AuditService`:处理审计相关的业务逻辑
- `ConfigService`:处理配置相关的业务逻辑
- `DataService`:处理数据相关的业务逻辑
- `ReportService`:处理报表相关的业务逻辑
### 2.3 仓库层Repository
仓库层负责数据访问,包括数据库的 CRUD 操作。仓库层通过 Spring Data JPA 实现,提供了简洁的数据库操作接口。
**主要职责**
- 实现数据库的 CRUD 操作
- 提供查询方法
- 管理数据库事务
**核心仓库**
- `UserRepository`:处理用户数据的访问
- `ProductRepository`:处理商品数据的访问
- `OrderRepository`:处理订单数据的访问
- `PaymentRepository`:处理支付数据的访问
- `LogisticsRepository`:处理物流数据的访问
- `AlertRepository`:处理告警数据的访问
- `AuditRepository`:处理审计数据的访问
- `ConfigRepository`:处理配置数据的访问
### 2.4 模型层Model
模型层定义了数据结构,包括实体类和 DTO数据传输对象。实体类对应数据库表DTO 用于在不同层之间传递数据。
**主要职责**
- 定义数据结构
- 映射数据库表
- 提供数据访问方法
**核心模型**
- `User`:用户模型
- `Product`:商品模型
- `Order`:订单模型
- `Payment`:支付模型
- `Logistics`:物流模型
- `Alert`:告警模型
- `Audit`:审计模型
- `Config`:配置模型
## 3. 核心流程
### 3.1 用户认证流程
1. **用户注册**:用户提交注册信息,`AuthController` 调用 `AuthService``register` 方法,验证输入数据,创建用户并返回用户信息。
2. **用户登录**:用户提交登录信息,`AuthController` 调用 `AuthService``login` 方法,验证用户名和密码,生成 JWT 令牌并返回。
3. **令牌验证**:请求携带 JWT 令牌,`SecurityConfig` 验证令牌的有效性,确保用户已认证。
### 3.2 商品管理流程
1. **创建商品**:用户提交商品信息,`ProductController` 调用 `ProductService``create` 方法,验证输入数据,创建商品并返回商品信息。
2. **查询商品**:用户请求商品列表,`ProductController` 调用 `ProductService``getAll` 方法,根据过滤条件查询商品并返回。
3. **更新商品**:用户提交商品更新信息,`ProductController` 调用 `ProductService``update` 方法,验证输入数据,更新商品并返回更新后的商品信息。
4. **删除商品**:用户请求删除商品,`ProductController` 调用 `ProductService``delete` 方法,删除商品并返回成功信息。
### 3.3 订单管理流程
1. **创建订单**:用户提交订单信息,`OrderController` 调用 `OrderService``createOrder` 方法,验证输入数据,创建订单并返回订单信息。
2. **查询订单**:用户请求订单列表,`OrderController` 调用 `OrderService``getOrders` 方法,根据过滤条件查询订单并返回。
3. **更新订单**:用户提交订单更新信息,`OrderController` 调用 `OrderService``updateOrder` 方法,验证输入数据,更新订单并返回更新后的订单信息。
4. **订单状态流转**:用户请求更新订单状态,`OrderController` 调用 `OrderService``transitionOrderStatus` 方法,更新订单状态并返回成功信息。
### 3.4 支付管理流程
1. **创建支付**:用户提交支付信息,`PaymentController` 调用 `PaymentService``create` 方法,验证输入数据,创建支付并返回支付信息。
2. **查询支付**:用户请求支付列表,`PaymentController` 调用 `PaymentService``getAll` 方法,根据过滤条件查询支付并返回。
3. **更新支付**:用户提交支付更新信息,`PaymentController` 调用 `PaymentService``update` 方法,验证输入数据,更新支付并返回更新后的支付信息。
### 3.5 物流管理流程
1. **创建物流**:用户提交物流信息,`LogisticsController` 调用 `LogisticsService``create` 方法,验证输入数据,创建物流并返回物流信息。
2. **查询物流**:用户请求物流列表,`LogisticsController` 调用 `LogisticsService``getAll` 方法,根据过滤条件查询物流并返回。
3. **更新物流**:用户提交物流更新信息,`LogisticsController` 调用 `LogisticsService``update` 方法,验证输入数据,更新物流并返回更新后的物流信息。
### 3.6 监控与告警流程
1. **系统健康检查**:用户请求系统健康状态,`MonitoringController` 调用 `MonitoringService``getSystemHealth` 方法,返回系统健康状态。
2. **性能指标获取**:用户请求系统性能指标,`MonitoringController` 调用 `MonitoringService``getPerformanceMetrics` 方法,返回系统性能指标。
3. **告警创建**:系统检测到异常,`AlertService` 创建告警并存储到数据库。
4. **告警处理**:用户请求处理告警,`AlertController` 调用 `AlertService``resolveAlert` 方法,更新告警状态为已解决。
## 4. 技术实现细节
### 4.1 数据库设计
- **用户表**:存储用户信息,包括用户名、密码、邮箱、角色等。
- **商品表**:存储商品信息,包括标题、描述、价格、数量等。
- **订单表**:存储订单信息,包括订单号、状态、总金额等。
- **支付表**:存储支付信息,包括支付方式、金额、状态等。
- **物流表**:存储物流信息,包括物流方式、跟踪号、状态等。
- **告警表**:存储告警信息,包括告警类型、严重程度、状态等。
- **审计表**:存储审计日志,包括操作类型、资源类型、操作人等。
- **配置表**:存储系统配置,包括配置键、配置值、配置类型等。
### 4.2 缓存实现
使用 Redis 作为缓存存储,缓存高频访问的数据,如用户信息、商品信息等,提高系统的响应速度。
### 4.3 安全实现
- **JWT 认证**:使用 JWT 进行身份验证,确保 API 安全。
- **CSRF 保护**:实现 CSRF 令牌验证,防止 CSRF 攻击。
- **速率限制**:限制 API 请求频率,防止恶意请求。
- **密码加密**:使用 BCrypt 加密用户密码,确保密码安全。
### 4.4 国际化实现
使用 Spring 的国际化支持,提供英文和中文的资源文件,根据请求的 Accept-Language 头自动切换语言。
### 4.5 监控与告警实现
- **系统健康检查**:实现系统健康状态检查,包括数据库连接、缓存状态等。
- **性能指标监控**:实现系统性能指标监控,包括响应时间、请求次数等。
- **告警管理**:实现告警的创建、查询、更新和处理,及时发现和处理系统异常。
## 5. 扩展性设计
- **模块化设计**:系统采用模块化设计,各模块之间通过接口进行通信,便于功能扩展和代码维护。
- **依赖注入**:使用 Spring 的依赖注入,实现组件的解耦,便于单元测试和功能扩展。
- **配置化**:系统的配置通过 application.yml 文件进行配置,便于环境切换和参数调整。
- **插件化**:系统支持插件化开发,可以通过插件扩展系统功能。
## 6. 总结
Crawlful Hub 采用分层架构设计,实现了高内聚、低耦合的系统结构。系统通过控制器层、服务层、仓库层和模型层的划分,实现了业务逻辑的封装和复用,提高了系统的可维护性、可扩展性和可测试性。同时,系统通过缓存、安全、国际化等技术的应用,提高了系统的性能和用户体验。

1965
docs/02_API_Documentation.md Normal file

File diff suppressed because it is too large Load Diff

363
docs/03_Deployment_Guide.md Normal file
View File

@@ -0,0 +1,363 @@
# 部署指南
## 1. 环境要求
### 1.1 硬件要求
- **CPU**: 至少 2 核
- **内存**: 至少 4GB
- **磁盘**: 至少 50GB 可用空间
### 1.2 软件要求
- **Java**: JDK 17 或更高版本
- **MySQL**: 8.0 或更高版本
- **Redis**: 6.0 或更高版本
- **Maven**: 3.6 或更高版本
## 2. 安装步骤
### 2.1 安装 Java
**Windows 系统**:
1. 下载 JDK 17 安装包:[Oracle JDK 17](https://www.oracle.com/java/technologies/downloads/#java17)
2. 运行安装包,按照提示完成安装
3. 配置环境变量:
- 右键点击「此电脑」→「属性」→「高级系统设置」→「环境变量」
- 在「系统变量」中添加 `JAVA_HOME`,值为 JDK 安装目录
- 在「系统变量」的 `Path` 中添加 `%JAVA_HOME%\bin`
4. 验证安装:打开命令提示符,运行 `java -version`,显示 JDK 版本信息
**Linux 系统**:
1. 下载 JDK 17 安装包:
```bash
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
```
2. 安装 JDK
```bash
sudo rpm -ivh jdk-17_linux-x64_bin.rpm
```
3. 验证安装:
```bash
java -version
```
### 2.2 安装 MySQL
**Windows 系统**:
1. 下载 MySQL 8.0 安装包:[MySQL Community Server](https://dev.mysql.com/downloads/mysql/)
2. 运行安装包,按照提示完成安装
3. 配置 MySQL
- 启动 MySQL 服务
- 登录 MySQL修改 root 密码
- 创建数据库:`CREATE DATABASE crawlful_hub CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
**Linux 系统**:
1. 安装 MySQL
```bash
sudo yum install mysql-server
```
2. 启动 MySQL 服务:
```bash
sudo systemctl start mysqld
```
3. 配置 MySQL
```bash
sudo mysql_secure_installation
```
4. 创建数据库:
```bash
mysql -u root -p
CREATE DATABASE crawlful_hub CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```
### 2.3 安装 Redis
**Windows 系统**:
1. 下载 Redis 安装包:[Redis for Windows](https://github.com/tporadowski/redis/releases)
2. 运行安装包,按照提示完成安装
3. 启动 Redis 服务:
```bash
redis-server
```
**Linux 系统**:
1. 安装 Redis
```bash
sudo yum install redis
```
2. 启动 Redis 服务:
```bash
sudo systemctl start redis
```
### 2.4 安装 Maven
**Windows 系统**:
1. 下载 Maven 安装包:[Apache Maven](https://maven.apache.org/download.cgi)
2. 解压安装包到指定目录
3. 配置环境变量:
- 右键点击「此电脑」→「属性」→「高级系统设置」→「环境变量」
- 在「系统变量」中添加 `MAVEN_HOME`,值为 Maven 安装目录
- 在「系统变量」的 `Path` 中添加 `%MAVEN_HOME%\bin`
4. 验证安装:打开命令提示符,运行 `mvn -version`,显示 Maven 版本信息
**Linux 系统**:
1. 安装 Maven
```bash
sudo yum install maven
```
2. 验证安装:
```bash
mvn -version
```
## 3. 项目配置
### 3.1 数据库配置
编辑 `src/main/resources/application.yml` 文件,修改数据库连接信息:
```yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/crawlful_hub?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
```
### 3.2 Redis 配置
编辑 `src/main/resources/application.yml` 文件,修改 Redis 连接信息:
```yaml
spring:
redis:
host: localhost
port: 6379
password:
database: 0
```
### 3.3 JWT 配置
编辑 `src/main/resources/application.yml` 文件,修改 JWT 配置:
```yaml
spring:
security:
jwt:
secret: your-secret-key
expiration: 86400000
```
### 3.4 服务器配置
编辑 `src/main/resources/application.yml` 文件,修改服务器配置:
```yaml
server:
port: 3001
servlet:
context-path: /api
```
## 4. 构建与部署
### 4.1 构建项目
1. 进入项目目录:
```bash
cd d:\trae_projects\makemd\makemd\serverjava
```
2. 执行 Maven 构建:
```bash
mvn clean package
```
3. 构建成功后,在 `target` 目录中生成 `serverjava-0.0.1-SNAPSHOT.jar` 文件。
### 4.2 运行项目
**方法一:直接运行**
1. 进入 `target` 目录:
```bash
cd target
```
2. 运行 jar 文件:
```bash
java -jar serverjava-0.0.1-SNAPSHOT.jar
```
**方法二:作为服务运行**
**Windows 系统**:
1. 创建服务脚本:
```batch
@echo off
set JAVA_HOME=C:\Program Files\Java\jdk-17
set PATH=%JAVA_HOME%\bin;%PATH%
java -jar d:\trae_projects\makemd\makemd\serverjava\target\serverjava-0.0.1-SNAPSHOT.jar
```
2. 将脚本保存为 `serverjava.bat`,然后运行。
**Linux 系统**:
1. 创建服务文件:
```bash
sudo nano /etc/systemd/system/serverjava.service
```
2. 添加以下内容:
```
[Unit]
Description=ServerJava Service
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/bin/java -jar /path/to/serverjava/target/serverjava-0.0.1-SNAPSHOT.jar
Restart=on-failure
[Install]
WantedBy=multi-user.target
```
3. 启动服务:
```bash
sudo systemctl start serverjava
sudo systemctl enable serverjava
```
## 5. 验证部署
1. 打开浏览器,访问 `http://localhost:3001/api/api-docs`,查看 API 文档。
2. 访问 `http://localhost:3001/api/v1/monitoring/health`,查看系统健康状态。
3. 访问 `http://localhost:3001/api/v1/monitoring/ping`,测试系统响应。
## 6. 日志管理
### 6.1 日志配置
编辑 `src/main/resources/logback.xml` 文件,修改日志配置:
```xml
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/server.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/server.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
```
### 6.2 日志查看
**Windows 系统**:
1. 进入项目目录,查看日志文件:
```bash
cd d:\trae_projects\makemd\makemd\serverjava
type logs\server.log
```
**Linux 系统**:
1. 进入项目目录,查看日志文件:
```bash
cd /path/to/serverjava
tail -f logs/server.log
```
## 7. 故障排查
### 7.1 常见问题
1. **数据库连接失败**
- 检查数据库服务是否运行
- 检查数据库连接配置是否正确
- 检查数据库用户权限是否正确
2. **Redis 连接失败**
- 检查 Redis 服务是否运行
- 检查 Redis 连接配置是否正确
3. **端口被占用**
- 检查端口是否被其他服务占用
- 修改 `application.yml` 中的端口配置
4. **JWT 验证失败**
- 检查 JWT 密钥是否正确
- 检查 JWT 令牌是否过期
### 7.2 调试方法
1. **查看日志**:查看 `logs/server.log` 文件,了解系统运行状态和错误信息。
2. **使用 API 文档**:访问 `http://localhost:3001/api/api-docs`,测试 API 接口。
3. **使用健康检查**:访问 `http://localhost:3001/api/v1/monitoring/health`,检查系统健康状态。
4. **使用 Ping 测试**:访问 `http://localhost:3001/api/v1/monitoring/ping`,测试系统响应。
## 8. 升级与维护
### 8.1 升级步骤
1. 停止服务:
```bash
sudo systemctl stop serverjava
```
2. 备份数据:
```bash
mysqldump -u root -p crawlful_hub > crawlful_hub_backup.sql
```
3. 拉取最新代码:
```bash
git pull
```
4. 重新构建项目:
```bash
mvn clean package
```
5. 启动服务:
```bash
sudo systemctl start serverjava
```
### 8.2 维护计划
1. **定期备份**:定期备份数据库和配置文件。
2. **更新依赖**:定期更新项目依赖,确保系统安全。
3. **监控系统**:使用监控工具监控系统运行状态,及时发现和处理异常。
4. **性能优化**:根据系统运行情况,优化数据库查询、缓存策略等。
## 9. 总结
本部署指南详细介绍了 Crawlful Hub 项目的部署方法、环境要求和配置步骤。通过本指南,您可以快速部署和维护系统,确保系统的稳定运行。

182
docs/04_Test_Guide.md Normal file
View File

@@ -0,0 +1,182 @@
# 测试指南
## 1. 测试概述
Crawlful Hub 项目采用了全面的测试策略,包括单元测试、集成测试和系统测试,确保系统的稳定性和可靠性。本指南详细介绍了项目的测试方法和测试策略。
## 2. 测试环境
### 2.1 硬件要求
- **CPU**: 至少 2 核
- **内存**: 至少 4GB
- **磁盘**: 至少 50GB 可用空间
### 2.2 软件要求
- **Java**: JDK 17 或更高版本
- **MySQL**: 8.0 或更高版本
- **Redis**: 6.0 或更高版本
- **Maven**: 3.6 或更高版本
- **JUnit 5**: 项目集成的测试框架
## 3. 测试类型
### 3.1 单元测试
单元测试是对系统中最小的可测试单元进行测试,通常是对单个方法或类的测试。单元测试的目的是验证每个单元是否按照预期工作。
**核心测试类**
- `AuthServiceTest.java`:测试认证服务的功能
- `OrderServiceTest.java`:测试订单服务的功能
- `ProductServiceTest.java`:测试商品服务的功能
### 3.2 集成测试
集成测试是对系统中多个组件的交互进行测试,验证组件之间的协作是否正确。集成测试的目的是确保系统的各个组件能够正确地协同工作。
**核心测试类**
- `SystemIntegrationTest.java`:测试整个系统的集成功能
### 3.3 系统测试
系统测试是对整个系统的功能进行测试,验证系统是否满足需求规格。系统测试的目的是确保系统能够按照预期工作,满足用户的需求。
**测试方法**
- 使用 API 文档测试 API 接口
- 使用健康检查端点测试系统状态
- 使用监控端点测试系统性能
## 4. 测试工具
### 4.1 JUnit 5
JUnit 5 是 Java 中最流行的测试框架用于编写和运行单元测试。Crawlful Hub 项目使用 JUnit 5 进行单元测试和集成测试。
### 4.2 Mockito
Mockito 是一个用于 Java 的 mocking 框架用于创建和配置模拟对象。Crawlful Hub 项目使用 Mockito 模拟依赖对象,便于单元测试。
### 4.3 Spring Test
Spring Test 是 Spring 框架提供的测试工具,用于测试 Spring 应用。Crawlful Hub 项目使用 Spring Test 测试 Spring 组件。
### 4.4 Postman
Postman 是一个用于测试 API 的工具,用于发送 HTTP 请求并查看响应。Crawlful Hub 项目使用 Postman 测试 API 接口。
## 5. 测试执行
### 5.1 运行单元测试
1. 进入项目目录:
```bash
cd d:\trae_projects\makemd\makemd\serverjava
```
2. 执行单元测试:
```bash
mvn test
```
### 5.2 运行集成测试
1. 进入项目目录:
```bash
cd d:\trae_projects\makemd\makemd\serverjava
```
2. 执行集成测试:
```bash
mvn verify -Pintegration-test
```
### 5.3 运行系统测试
1. 启动系统:
```bash
java -jar target/serverjava-0.0.1-SNAPSHOT.jar
```
2. 使用 Postman 测试 API 接口:
- 访问 `http://localhost:3001/api/api-docs`,获取 API 文档
- 使用 Postman 发送请求,测试 API 接口
3. 使用健康检查端点测试系统状态:
- 访问 `http://localhost:3001/api/v1/monitoring/health`
4. 使用监控端点测试系统性能:
- 访问 `http://localhost:3001/api/v1/monitoring/metrics`
## 6. 测试策略
### 6.1 测试覆盖率
Crawlful Hub 项目的测试覆盖率目标是:
- **单元测试覆盖率**:至少 80%
- **集成测试覆盖率**:至少 60%
- **系统测试覆盖率**:至少 40%
### 6.2 测试用例设计
测试用例设计遵循以下原则:
- **边界值测试**:测试边界条件,如空值、最大值、最小值等
- **等价类测试**:测试等价类,如有效输入、无效输入等
- **异常测试**:测试异常情况,如参数错误、系统错误等
- **场景测试**:测试实际场景,如用户注册、登录、下单等
### 6.3 测试数据
测试数据的设计遵循以下原则:
- **真实数据**:使用真实的业务数据进行测试
- **边界数据**:使用边界值进行测试
- **异常数据**:使用异常数据进行测试
- **覆盖所有场景**:确保测试数据覆盖所有业务场景
## 7. 测试报告
### 7.1 单元测试报告
运行单元测试后Maven 会生成单元测试报告,位于 `target/surefire-reports` 目录。
### 7.2 集成测试报告
运行集成测试后Maven 会生成集成测试报告,位于 `target/failsafe-reports` 目录。
### 7.3 代码覆盖率报告
使用 JaCoCo 插件生成代码覆盖率报告,位于 `target/site/jacoco` 目录。
## 8. 测试最佳实践
### 8.1 单元测试最佳实践
- **测试单个方法**:每个单元测试只测试一个方法
- **使用断言**:使用断言验证测试结果
- **模拟依赖**:使用 Mockito 模拟依赖对象
- **测试边界条件**:测试边界值和异常情况
- **保持测试简单**:测试代码应该简洁明了
### 8.2 集成测试最佳实践
- **测试组件交互**:测试组件之间的协作
- **使用真实依赖**:使用真实的依赖对象
- **测试业务流程**:测试完整的业务流程
- **保持测试独立**:每个集成测试应该独立运行
### 8.3 系统测试最佳实践
- **测试完整功能**:测试系统的完整功能
- **使用真实环境**:使用真实的环境进行测试
- **测试用户场景**:测试实际的用户场景
- **性能测试**:测试系统的性能
## 9. 测试自动化
Crawlful Hub 项目使用 Maven 进行测试自动化,配置了以下测试目标:
- **mvn test**:运行单元测试
- **mvn verify**:运行单元测试和集成测试
- **mvn clean package**:构建项目并运行测试
## 10. 总结
本测试指南详细介绍了 Crawlful Hub 项目的测试方法和测试策略。通过本指南,您可以了解如何编写和运行测试,确保系统的稳定性和可靠性。

306
docs/05_Database_Design.md Normal file
View File

@@ -0,0 +1,306 @@
# 数据库设计
## 1. 数据库概述
Crawlful Hub 项目使用 MySQL 8.0 作为数据库,采用了关系型数据库设计,确保数据的一致性和完整性。本文档详细介绍了项目的数据库表结构、索引和关系。
## 2. 数据库表结构
### 2.1 用户表cf_user
| 字段名 | 数据类型 | 约束 | 描述 |
|-------|---------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 用户 ID |
| tenant_id | VARCHAR(255) | NOT NULL | 租户 ID |
| username | VARCHAR(255) | NOT NULL, UNIQUE | 用户名 |
| password | VARCHAR(255) | NOT NULL | 密码(加密存储) |
| email | VARCHAR(255) | NOT NULL, UNIQUE | 邮箱 |
| role | VARCHAR(50) | | 角色 |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 2.2 商品表cf_product
| 字段名 | 数据类型 | 约束 | 描述 |
|-------|---------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 商品 ID |
| tenant_id | VARCHAR(255) | NOT NULL | 租户 ID |
| shop_id | VARCHAR(255) | | 店铺 ID |
| title | VARCHAR(255) | NOT NULL | 商品标题 |
| description | TEXT | | 商品描述 |
| main_image | VARCHAR(255) | | 商品主图 |
| platform | VARCHAR(50) | | 平台 |
| platform_product_id | VARCHAR(255) | | 平台商品 ID |
| price | DECIMAL(10,2) | | 价格 |
| cost_price | DECIMAL(10,2) | | 成本价格 |
| quantity | INT | | 数量 |
| status | VARCHAR(50) | | 状态 |
| phash | VARCHAR(255) | | 图片哈希 |
| semantic_hash | VARCHAR(255) | | 语义哈希 |
| vector_embedding | TEXT | | 向量嵌入 |
| attributes | JSON | | 属性 |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 2.3 订单表cf_order
| 字段名 | 数据类型 | 约束 | 描述 |
|-------|---------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 订单 ID |
| tenant_id | VARCHAR(255) | NOT NULL | 租户 ID |
| shop_id | VARCHAR(255) | | 店铺 ID |
| platform | VARCHAR(50) | | 平台 |
| platform_order_id | VARCHAR(255) | | 平台订单 ID |
| status | VARCHAR(50) | | 状态 |
| total_amount | DECIMAL(10,2) | | 总金额 |
| currency | VARCHAR(10) | | 货币 |
| customer_info | JSON | | 客户信息 |
| items | JSON | | 商品列表 |
| shipping_address | JSON | | shipping 地址 |
| tracking_number | VARCHAR(255) | | 跟踪号 |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 2.4 支付表cf_payment
| 字段名 | 数据类型 | 约束 | 描述 |
|-------|---------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 支付 ID |
| tenant_id | VARCHAR(255) | NOT NULL | 租户 ID |
| order_id | BIGINT | FOREIGN KEY (order_id) REFERENCES cf_order(id) | 订单 ID |
| payment_method | VARCHAR(50) | | 支付方式 |
| amount | DECIMAL(10,2) | | 金额 |
| currency | VARCHAR(10) | | 货币 |
| status | VARCHAR(50) | | 状态 |
| transaction_id | VARCHAR(255) | | 交易 ID |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 2.5 物流表cf_logistics
| 字段名 | 数据类型 | 约束 | 描述 |
|-------|---------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 物流 ID |
| tenant_id | VARCHAR(255) | NOT NULL | 租户 ID |
| order_id | BIGINT | FOREIGN KEY (order_id) REFERENCES cf_order(id) | 订单 ID |
| shipping_method | VARCHAR(50) | | 物流方式 |
| tracking_number | VARCHAR(255) | | 跟踪号 |
| carrier | VARCHAR(50) | | 物流公司 |
| status | VARCHAR(50) | | 状态 |
| estimated_delivery_date | DATETIME | | 预计送达日期 |
| actual_delivery_date | DATETIME | | 实际送达日期 |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 2.6 告警表cf_alert
| 字段名 | 数据类型 | 约束 | 描述 |
|-------|---------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 告警 ID |
| tenant_id | VARCHAR(255) | NOT NULL | 租户 ID |
| alert_type | VARCHAR(50) | | 告警类型 |
| severity | VARCHAR(50) | | 严重程度 |
| message | TEXT | | 告警消息 |
| status | VARCHAR(50) | | 状态 |
| source | VARCHAR(255) | | 告警来源 |
| threshold | VARCHAR(255) | | 阈值 |
| actual_value | VARCHAR(255) | | 实际值 |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| resolved_at | DATETIME | | 解决时间 |
### 2.7 审计表cf_audit
| 字段名 | 数据类型 | 约束 | 描述 |
|-------|---------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 审计日志 ID |
| tenant_id | VARCHAR(255) | | 租户 ID |
| shop_id | VARCHAR(255) | | 店铺 ID |
| user_id | BIGINT | | 用户 ID |
| action | VARCHAR(255) | | 操作类型 |
| resource_type | VARCHAR(255) | | 资源类型 |
| resource_id | VARCHAR(255) | | 资源 ID |
| ip_address | VARCHAR(100) | | IP 地址 |
| user_agent | TEXT | | 用户代理 |
| details | TEXT | | 详细信息 |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
### 2.8 配置表cf_config
| 字段名 | 数据类型 | 约束 | 描述 |
|-------|---------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 配置 ID |
| tenant_id | VARCHAR(255) | | 租户 ID |
| shop_id | VARCHAR(255) | | 店铺 ID |
| config_key | VARCHAR(255) | NOT NULL | 配置键 |
| config_value | VARCHAR(255) | NOT NULL | 配置值 |
| config_type | VARCHAR(50) | | 配置类型 |
| description | TEXT | | 配置描述 |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
## 3. 索引设计
### 3.1 用户表索引
| 索引名 | 字段 | 类型 | 描述 |
|-------|------|------|------|
| PRIMARY | id | PRIMARY | 主键索引 |
| idx_user_tenant_id | tenant_id | INDEX | 租户 ID 索引 |
| UNIQUE | username | UNIQUE | 用户名唯一索引 |
| UNIQUE | email | UNIQUE | 邮箱唯一索引 |
### 3.2 商品表索引
| 索引名 | 字段 | 类型 | 描述 |
|-------|------|------|------|
| PRIMARY | id | PRIMARY | 主键索引 |
| idx_product_tenant_id | tenant_id | INDEX | 租户 ID 索引 |
| idx_product_platform | platform | INDEX | 平台索引 |
### 3.3 订单表索引
| 索引名 | 字段 | 类型 | 描述 |
|-------|------|------|------|
| PRIMARY | id | PRIMARY | 主键索引 |
| idx_order_tenant_id | tenant_id | INDEX | 租户 ID 索引 |
| idx_order_platform | platform | INDEX | 平台索引 |
### 3.4 支付表索引
| 索引名 | 字段 | 类型 | 描述 |
|-------|------|------|------|
| PRIMARY | id | PRIMARY | 主键索引 |
| idx_payment_tenant_id | tenant_id | INDEX | 租户 ID 索引 |
| idx_payment_order_id | order_id | INDEX | 订单 ID 索引 |
### 3.5 物流表索引
| 索引名 | 字段 | 类型 | 描述 |
|-------|------|------|------|
| PRIMARY | id | PRIMARY | 主键索引 |
| idx_logistics_tenant_id | tenant_id | INDEX | 租户 ID 索引 |
| idx_logistics_order_id | order_id | INDEX | 订单 ID 索引 |
### 3.6 告警表索引
| 索引名 | 字段 | 类型 | 描述 |
|-------|------|------|------|
| PRIMARY | id | PRIMARY | 主键索引 |
| idx_alert_tenant_id | tenant_id | INDEX | 租户 ID 索引 |
| idx_alert_status | status | INDEX | 状态索引 |
| idx_alert_severity | severity | INDEX | 严重程度索引 |
| idx_alert_alert_type | alert_type | INDEX | 告警类型索引 |
| idx_alert_created_at | created_at | INDEX | 创建时间索引 |
### 3.7 审计表索引
| 索引名 | 字段 | 类型 | 描述 |
|-------|------|------|------|
| PRIMARY | id | PRIMARY | 主键索引 |
| idx_audit_tenant_id | tenant_id | INDEX | 租户 ID 索引 |
| idx_audit_shop_id | shop_id | INDEX | 店铺 ID 索引 |
| idx_audit_user_id | user_id | INDEX | 用户 ID 索引 |
| idx_audit_action | action | INDEX | 操作类型索引 |
| idx_audit_resource_type | resource_type | INDEX | 资源类型索引 |
| idx_audit_created_at | created_at | INDEX | 创建时间索引 |
### 3.8 配置表索引
| 索引名 | 字段 | 类型 | 描述 |
|-------|------|------|------|
| PRIMARY | id | PRIMARY | 主键索引 |
| idx_config_tenant_id | tenant_id | INDEX | 租户 ID 索引 |
| idx_config_shop_id | shop_id | INDEX | 店铺 ID 索引 |
| idx_config_key | config_key | INDEX | 配置键索引 |
## 4. 关系设计
### 4.1 表关系
- **用户与订单**:一对多关系,一个用户可以创建多个订单
- **订单与支付**:一对一关系,一个订单对应一个支付
- **订单与物流**:一对一关系,一个订单对应一个物流
- **租户与所有表**:一对多关系,一个租户可以有多个用户、商品、订单等
### 4.2 外键约束
| 表名 | 外键字段 | 引用表 | 引用字段 | 约束 |
|------|---------|--------|---------|------|
| cf_payment | order_id | cf_order | id | ON DELETE CASCADE |
| cf_logistics | order_id | cf_order | id | ON DELETE CASCADE |
## 5. 数据类型选择
### 5.1 字符串类型
- **VARCHAR**:用于存储可变长度的字符串,如用户名、邮箱等
- **TEXT**:用于存储较长的文本,如商品描述、详细信息等
- **JSON**:用于存储 JSON 格式的数据,如客户信息、商品列表等
### 5.2 数值类型
- **BIGINT**:用于存储较大的整数,如 ID 等
- **INT**:用于存储整数,如数量等
- **DECIMAL(10,2)**:用于存储金额,确保精度
### 5.3 日期类型
- **DATETIME**:用于存储日期和时间,如创建时间、更新时间等
## 6. 数据库迁移
Crawlful Hub 项目使用 Flyway 进行数据库迁移,确保数据库结构的版本控制和一致性。
### 6.1 迁移脚本
| 脚本名 | 描述 |
|-------|------|
| V1__init_schema.sql | 初始化数据库表结构 |
| V2__add_alert_table.sql | 添加告警表 |
### 6.2 迁移执行
1. 进入项目目录:
```bash
cd d:\trae_projects\makemd\makemd\serverjava
```
2. 执行数据库迁移:
```bash
mvn flyway:migrate
```
## 7. 性能优化
### 7.1 索引优化
- **添加适当的索引**:为频繁查询的字段添加索引
- **避免过度索引**:不要为所有字段添加索引,只为必要的字段添加
- **使用复合索引**:对于多字段查询,使用复合索引
### 7.2 查询优化
- **使用分页查询**:避免一次性加载大量数据
- **使用索引覆盖查询**:减少回表操作
- **避免全表扫描**:使用索引进行查询
- **使用预编译语句**:减少 SQL 解析时间
### 7.3 连接池优化
- **使用 HikariCP**:高性能的数据库连接池
- **配置合理的连接数**:根据系统负载配置连接数
- **设置连接超时**:避免连接占用过长时间
## 8. 安全考虑
### 8.1 数据加密
- **密码加密**:使用 BCrypt 加密用户密码
- **敏感数据加密**:对敏感数据进行加密存储
### 8.2 访问控制
- **最小权限原则**:只授予必要的数据库权限
- **使用参数化查询**:防止 SQL 注入攻击
- **定期审计**:定期审计数据库访问日志
## 9. 总结
本数据库设计文档详细介绍了 Crawlful Hub 项目的数据库表结构、索引和关系。通过合理的数据库设计,确保了系统的性能和可靠性。

297
docs/06_Security_Guide.md Normal file
View File

@@ -0,0 +1,297 @@
# 安全指南
## 1. 安全概述
Crawlful Hub 项目采用了全面的安全措施,确保系统的安全性和可靠性。本文档详细介绍了项目的安全措施和最佳实践。
## 2. 认证与授权
### 2.1 JWT 认证
Crawlful Hub 项目使用 JWTJSON Web Token进行认证确保用户身份的安全性。
**实现细节**
- 使用 Spring Security 实现 JWT 认证
- 配置 JWT 密钥和过期时间
- 验证 JWT 令牌的有效性
**配置示例**
```yaml
spring:
security:
jwt:
secret: your-secret-key
expiration: 86400000
```
### 2.2 角色授权
Crawlful Hub 项目使用基于角色的访问控制RBAC确保用户只能访问其权限范围内的资源。
**预设角色**
- `ADMIN` - 全权
- `MANAGER` - 运营主管
- `OPERATOR` - 运营专员
- `FINANCE` - 财务主管
- `SOURCING` - 采购专家
- `LOGISTICS` - 物流专家
- `ANALYST` - 数据分析师
**授权实现**
- 使用 `@PreAuthorize` 注解进行方法级别的授权
- 实现 `authorize()` 中间件进行路由级别的授权
**示例代码**
```java
@PreAuthorize("hasRole('ADMIN')")
public void deleteUser(Long id) {
// 实现删除用户的逻辑
}
```
## 3. 数据安全
### 3.1 密码加密
Crawlful Hub 项目使用 BCrypt 对用户密码进行加密,确保密码的安全性。
**实现细节**
- 使用 `BCryptPasswordEncoder` 对密码进行加密
- 存储加密后的密码,不存储明文密码
**示例代码**
```java
@Autowired
private PasswordEncoder passwordEncoder;
public User createUser(User user) {
user.setPassword(passwordEncoder.encode(user.getPassword()));
return userRepository.save(user);
}
```
### 3.2 敏感数据保护
Crawlful Hub 项目对敏感数据进行保护,确保数据的安全性。
**保护措施**
- 对敏感数据进行加密存储
- 避免在日志中记录敏感信息
- 使用 HTTPS 协议传输数据
**示例代码**
```java
@Column(columnDefinition = "VARBINARY(255)")
private byte[] sensitiveData;
```
## 4. 输入验证
### 4.1 参数验证
Crawlful Hub 项目对输入参数进行验证,确保输入的合法性。
**实现细节**
- 使用 `@Valid` 注解和 `BindingResult` 进行参数验证
- 实现 `ValidationUtil` 工具类进行数据验证
**示例代码**
```java
@PostMapping("/create")
public ResponseEntity<User> createUser(@Valid @RequestBody User user, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return ResponseEntity.badRequest().build();
}
return ResponseEntity.ok(userService.createUser(user));
}
```
### 4.2 SQL 注入防护
Crawlful Hub 项目使用参数化查询,防止 SQL 注入攻击。
**实现细节**
- 使用 JPA 或 MyBatis 进行数据库操作
- 避免直接拼接 SQL 语句
**示例代码**
```java
// 正确的做法
@Query("SELECT u FROM User u WHERE u.username = :username")
User findByUsername(@Param("username") String username);
// 错误的做法(避免)
String sql = "SELECT * FROM user WHERE username = '" + username + "'";
```
## 5. 跨站请求伪造CSRF防护
Crawlful Hub 项目实现了 CSRF 防护,防止跨站请求伪造攻击。
**实现细节**
- 使用 Spring Security 的 CSRF 保护
- 配置 CSRF 令牌的生成和验证
**配置示例**
```java
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
}
}
```
## 6. 速率限制
Crawlful Hub 项目实现了速率限制,防止暴力破解和 DoS 攻击。
**实现细节**
- 实现 `RateLimitFilter` 过滤器
- 基于客户端 IP 和请求 URI 进行限制
- 限制客户端每分钟最大请求数为 60 次
**示例代码**
```java
@Component
public class RateLimitFilter implements Filter {
private final Map<String, AtomicInteger> requestCounts = new ConcurrentHashMap<>();
private final Map<String, Long> lastResetTimes = new ConcurrentHashMap<>();
private static final int MAX_REQUESTS_PER_MINUTE = 60;
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
String clientIp = httpRequest.getRemoteAddr();
String requestUri = httpRequest.getRequestURI();
String key = clientIp + ":" + requestUri;
long currentTime = System.currentTimeMillis();
long lastResetTime = lastResetTimes.getOrDefault(key, 0L);
if (currentTime - lastResetTime > 60000) {
requestCounts.put(key, new AtomicInteger(1));
lastResetTimes.put(key, currentTime);
} else {
AtomicInteger count = requestCounts.get(key);
if (count != null && count.incrementAndGet() > MAX_REQUESTS_PER_MINUTE) {
((HttpServletResponse) response).setStatus(HttpStatus.TOO_MANY_REQUESTS.value());
return;
}
}
chain.doFilter(request, response);
}
}
```
## 7. 安全日志
Crawlful Hub 项目实现了安全日志,记录系统的安全事件。
**实现细节**
- 使用 Logback 配置安全日志
- 记录用户登录、登出、权限变更等安全事件
- 记录异常登录尝试和权限错误
**配置示例**
```xml
<appender name="SECURITY" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/security.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/security.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.crawlful.hub.security" level="INFO" additivity="false">
<appender-ref ref="SECURITY" />
</logger>
```
## 8. 安全最佳实践
### 8.1 代码安全
- **使用最新的依赖**:定期更新项目依赖,修复安全漏洞
- **避免硬编码**:避免在代码中硬编码密钥、密码等敏感信息
- **使用安全的加密算法**:使用强加密算法,如 BCrypt、AES 等
- **定期代码审查**:定期进行代码审查,发现和修复安全问题
### 8.2 服务器安全
- **使用 HTTPS**:使用 HTTPS 协议传输数据
- **限制访问**:限制服务器的访问范围,只允许必要的端口和 IP 访问
- **定期更新**:定期更新服务器操作系统和软件,修复安全漏洞
- **使用防火墙**:使用防火墙保护服务器,防止未授权访问
### 8.3 数据库安全
- **最小权限原则**:只授予数据库用户必要的权限
- **定期备份**:定期备份数据库,防止数据丢失
- **使用参数化查询**:防止 SQL 注入攻击
- **加密敏感数据**:对敏感数据进行加密存储
### 8.4 应用安全
- **使用 CSRF 保护**:防止跨站请求伪造攻击
- **实现速率限制**:防止暴力破解和 DoS 攻击
- **验证输入**:对所有输入进行验证,防止恶意输入
- **使用安全的会话管理**:使用安全的会话管理机制,防止会话劫持
## 9. 安全审计
### 9.1 审计日志
Crawlful Hub 项目实现了审计日志,记录系统的操作和事件。
**实现细节**
- 使用 `cf_audit` 表存储审计日志
- 记录用户操作、资源访问、权限变更等事件
- 记录 IP 地址、用户代理等信息
**示例代码**
```java
@Service
public class AuditService {
@Autowired
private AuditRepository auditRepository;
public void logAudit(String tenantId, String shopId, Long userId, String action, String resourceType, String resourceId, String ipAddress, String userAgent, String details) {
Audit audit = new Audit();
audit.setTenantId(tenantId);
audit.setShopId(shopId);
audit.setUserId(userId);
audit.setAction(action);
audit.setResourceType(resourceType);
audit.setResourceId(resourceId);
audit.setIpAddress(ipAddress);
audit.setUserAgent(userAgent);
audit.setDetails(details);
audit.setCreatedAt(new Date());
auditRepository.save(audit);
}
}
```
### 9.2 安全扫描
Crawlful Hub 项目定期进行安全扫描,发现和修复安全漏洞。
**扫描工具**
- **OWASP ZAP**:用于 Web 应用安全扫描
- **SonarQube**:用于代码安全扫描
- **Nmap**:用于网络安全扫描
**扫描频率**
- 开发环境:每次代码提交后
- 测试环境:每周一次
- 生产环境:每月一次
## 10. 总结
本安全指南详细介绍了 Crawlful Hub 项目的安全措施和最佳实践。通过本指南,您可以了解如何确保系统的安全性和可靠性。

View File

@@ -0,0 +1,292 @@
# 维护指南
## 1. 维护概述
Crawlful Hub 项目需要定期维护,确保系统的稳定运行和性能优化。本文档详细介绍了项目的维护方法和最佳实践。
## 2. 日常维护
### 2.1 监控系统状态
**监控指标**
- **系统健康状态**:访问 `http://localhost:3001/api/v1/monitoring/health`
- **系统性能指标**:访问 `http://localhost:3001/api/v1/monitoring/metrics`
- **系统日志**:查看 `logs/server.log` 文件
**监控工具**
- **Prometheus**:用于监控系统性能指标
- **Grafana**:用于可视化监控数据
- **ELK Stack**:用于日志收集和分析
### 2.2 数据库维护
**定期备份**
- 每周备份一次数据库
- 使用 `mysqldump` 命令备份数据库
**优化数据库**
- 定期优化数据库表结构
- 定期分析数据库查询性能
- 定期更新数据库统计信息
**示例命令**
```bash
# 备份数据库
mysqldump -u root -p crawlful_hub > crawlful_hub_backup.sql
# 优化数据库表
mysqlcheck -u root -p --optimize crawlful_hub
# 分析数据库表
mysqlcheck -u root -p --analyze crawlful_hub
```
### 2.3 日志管理
**日志轮转**
- 配置 Logback 实现日志轮转
- 按日期保存日志文件
- 保留 30 天的日志文件
**日志分析**
- 定期分析系统日志
- 发现和解决系统异常
- 优化系统性能
**示例配置**
```xml
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/server.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/server.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
```
## 3. 性能优化
### 3.1 数据库优化
**索引优化**
- 为频繁查询的字段添加索引
- 避免过度索引
- 使用复合索引
**查询优化**
- 使用分页查询
- 使用索引覆盖查询
- 避免全表扫描
- 使用预编译语句
**连接池优化**
- 配置合理的连接数
- 设置连接超时
- 监控连接池状态
### 3.2 缓存优化
**Redis 缓存**
- 配置合理的缓存过期时间
- 监控缓存命中率
- 优化缓存键设计
**示例配置**
```java
@Configuration
@EnableCaching
public class CacheConfig {
@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory factory) {
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(10));
return RedisCacheManager.builder(factory)
.cacheDefaults(config)
.build();
}
}
```
### 3.3 服务器优化
**内存优化**
- 配置合理的 JVM 内存参数
- 监控内存使用情况
- 避免内存泄漏
**CPU 优化**
- 优化代码逻辑
- 避免阻塞操作
- 使用异步处理
**示例 JVM 参数**
```bash
java -Xms2G -Xmx4G -jar serverjava-0.0.1-SNAPSHOT.jar
```
## 4. 故障处理
### 4.1 常见故障
**数据库连接失败**
- 检查数据库服务是否运行
- 检查数据库连接配置是否正确
- 检查数据库用户权限是否正确
**Redis 连接失败**
- 检查 Redis 服务是否运行
- 检查 Redis 连接配置是否正确
**端口被占用**
- 检查端口是否被其他服务占用
- 修改 `application.yml` 中的端口配置
**JWT 验证失败**
- 检查 JWT 密钥是否正确
- 检查 JWT 令牌是否过期
### 4.2 故障排查
**查看日志**
- 查看 `logs/server.log` 文件
- 查找错误信息和异常堆栈
**使用健康检查**
- 访问 `http://localhost:3001/api/v1/monitoring/health`
- 检查系统健康状态
**使用 Ping 测试**
- 访问 `http://localhost:3001/api/v1/monitoring/ping`
- 测试系统响应
**使用 API 文档**
- 访问 `http://localhost:3001/api/api-docs`
- 测试 API 接口
## 5. 升级与更新
### 5.1 依赖更新
**定期更新依赖**
- 定期检查和更新项目依赖
- 修复安全漏洞
- 提高系统性能
**示例命令**
```bash
# 检查依赖更新
mvn dependency:check
# 更新依赖
mvn versions:update-properties
```
### 5.2 代码更新
**代码审查**
- 定期进行代码审查
- 发现和修复代码问题
- 优化代码结构
**版本控制**
- 使用 Git 进行版本控制
- 定期提交代码
- 管理代码分支
### 5.3 系统升级
**升级步骤**
1. 停止服务
2. 备份数据
3. 拉取最新代码
4. 重新构建项目
5. 启动服务
**示例命令**
```bash
# 停止服务
sudo systemctl stop serverjava
# 备份数据
mysqldump -u root -p crawlful_hub > crawlful_hub_backup.sql
# 拉取最新代码
git pull
# 重新构建项目
mvn clean package
# 启动服务
sudo systemctl start serverjava
```
## 6. 监控与告警
### 6.1 系统监控
**监控指标**
- **CPU 使用率**:监控系统 CPU 使用率
- **内存使用率**:监控系统内存使用率
- **磁盘使用率**:监控系统磁盘使用率
- **网络流量**:监控系统网络流量
- **API 响应时间**:监控 API 接口响应时间
- **数据库性能**:监控数据库查询性能
**监控工具**
- **Prometheus**:用于监控系统性能指标
- **Grafana**:用于可视化监控数据
- **ELK Stack**:用于日志收集和分析
### 6.2 告警系统
**告警类型**
- **系统告警**:系统故障、性能异常等
- **业务告警**:订单异常、支付失败等
- **安全告警**:未授权访问、异常登录等
**告警级别**
- **ERROR**:严重错误,需要立即处理
- **WARN**:警告,需要关注
- **INFO**:信息,仅供参考
**告警处理**
- 及时接收和处理告警
- 记录告警处理过程
- 分析告警原因,防止再次发生
## 7. 最佳实践
### 7.1 代码最佳实践
- **代码风格**:遵循 Java 代码风格规范
- **注释**:为代码添加适当的注释
- **测试**:为代码添加单元测试和集成测试
- **文档**:为代码添加文档
### 7.2 数据库最佳实践
- **表设计**:遵循数据库设计规范
- **索引**:为频繁查询的字段添加索引
- **查询**:优化数据库查询
- **备份**:定期备份数据库
### 7.3 服务器最佳实践
- **配置**:配置合理的服务器参数
- **监控**:监控服务器状态
- **安全**:确保服务器安全
- **备份**:定期备份服务器数据
### 7.4 维护最佳实践
- **定期维护**:定期进行系统维护
- **记录**:记录系统维护过程
- **分析**:分析系统维护结果
- **改进**:根据维护结果改进系统
## 8. 总结
本维护指南详细介绍了 Crawlful Hub 项目的维护方法和最佳实践。通过本指南,您可以了解如何确保系统的稳定运行和性能优化。

View File

@@ -0,0 +1,245 @@
# 国际化指南
## 1. 国际化概述
Crawlful Hub 项目支持国际化,确保系统可以在不同语言环境下正常运行。本文档详细介绍了项目的国际化支持和实现方法。
## 2. 国际化配置
### 2.1 资源文件
Crawlful Hub 项目使用 Spring 国际化支持,通过资源文件管理不同语言的文本。
**资源文件位置**
- `src/main/resources/i18n/messages.properties` - 英文资源文件
- `src/main/resources/i18n/messages_zh.properties` - 中文资源文件
**资源文件示例**
**messages.properties**
```properties
# Authentication
auth.login.success=Login successful
auth.login.failure=Invalid username or password
auth.register.success=Registration successful
auth.register.failure=Registration failed
# Product
product.create.success=Product created successfully
product.create.failure=Failed to create product
product.update.success=Product updated successfully
product.update.failure=Failed to update product
product.delete.success=Product deleted successfully
product.delete.failure=Failed to delete product
# Order
order.create.success=Order created successfully
order.create.failure=Failed to create order
order.update.success=Order updated successfully
order.update.failure=Failed to update order
order.delete.success=Order deleted successfully
order.delete.failure=Failed to delete order
```
**messages_zh.properties**
```properties
# 认证
auth.login.success=登录成功
auth.login.failure=用户名或密码错误
auth.register.success=注册成功
auth.register.failure=注册失败
# 商品
product.create.success=商品创建成功
product.create.failure=商品创建失败
product.update.success=商品更新成功
product.update.failure=商品更新失败
product.delete.success=商品删除成功
product.delete.failure=商品删除失败
# 订单
order.create.success=订单创建成功
order.create.failure=订单创建失败
order.update.success=订单更新成功
order.update.failure=订单更新失败
order.delete.success=订单删除成功
order.delete.failure=订单删除失败
```
### 2.2 国际化配置类
Crawlful Hub 项目通过 `InternationalizationConfig` 类配置国际化支持。
**配置示例**
```java
@Configuration
public class InternationalizationConfig implements WebMvcConfigurer {
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("i18n/messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public LocaleResolver localeResolver() {
CookieLocaleResolver localeResolver = new CookieLocaleResolver();
localeResolver.setDefaultLocale(Locale.ENGLISH);
return localeResolver;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
interceptor.setParamName("lang");
registry.addInterceptor(interceptor);
}
}
```
## 3. 国际化使用
### 3.1 在控制器中使用
Crawlful Hub 项目在控制器中使用国际化消息。
**示例代码**
```java
@RestController
@RequestMapping("/api/v1/users")
public class UserController {
@Autowired
private MessageSource messageSource;
@PostMapping("/register")
public ResponseEntity<String> register(@RequestBody User user, Locale locale) {
try {
userService.createUser(user);
return ResponseEntity.ok(messageSource.getMessage("auth.register.success", null, locale));
} catch (Exception e) {
return ResponseEntity.badRequest().body(messageSource.getMessage("auth.register.failure", null, locale));
}
}
}
```
### 3.2 在服务中使用
Crawlful Hub 项目在服务中使用国际化消息。
**示例代码**
```java
@Service
public class ProductService {
@Autowired
private MessageSource messageSource;
public Product createProduct(Product product, Locale locale) {
try {
Product savedProduct = productRepository.save(product);
log.info(messageSource.getMessage("product.create.success", null, locale));
return savedProduct;
} catch (Exception e) {
log.error(messageSource.getMessage("product.create.failure", null, locale), e);
throw e;
}
}
}
```
### 3.3 在异常处理中使用
Crawlful Hub 项目在异常处理中使用国际化消息。
**示例代码**
```java
@RestControllerAdvice
public class GlobalExceptionHandler {
@Autowired
private MessageSource messageSource;
@ExceptionHandler(Exception.class)
public ResponseEntity<ApiError> handleException(Exception e, Locale locale) {
ApiError error = new ApiError();
error.setCode("INTERNAL_ERROR");
error.setMessage(messageSource.getMessage("error.internal", null, locale));
error.setDetails(e.getMessage());
error.setTraceId(UUID.randomUUID().toString());
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error);
}
}
```
## 4. 语言切换
Crawlful Hub 项目支持通过 URL 参数切换语言。
**示例 URL**
- 英文:`http://localhost:3001/api/v1/users?lang=en`
- 中文:`http://localhost:3001/api/v1/users?lang=zh`
**实现细节**
- 使用 `LocaleChangeInterceptor` 拦截器处理语言切换
- 通过 `lang` 参数指定语言
- 支持的语言:`en`(英文)、`zh`(中文)
## 5. 国际化最佳实践
### 5.1 资源文件管理
- **命名规范**:使用 `messages_{language}.properties` 命名资源文件
- **组织方式**:按功能模块组织资源文件,如认证、商品、订单等
- **编码格式**:使用 UTF-8 编码
- **注释**:为资源文件添加适当的注释
### 5.2 消息键命名
- **命名规范**:使用 `module.action.result` 格式命名消息键
- **一致性**:保持消息键的一致性,便于管理和维护
- **可读性**:使用清晰、简洁的消息键,便于理解
### 5.3 国际化测试
- **测试不同语言**:测试系统在不同语言环境下的表现
- **测试语言切换**:测试语言切换功能是否正常
- **测试消息显示**:测试消息是否正确显示
## 6. 扩展国际化支持
### 6.1 添加新语言
**步骤**
1.`src/main/resources/i18n/` 目录下创建新的资源文件,如 `messages_fr.properties`(法语)
2. 翻译资源文件中的消息
3. 配置 `InternationalizationConfig` 类,支持新的语言
**示例**
```java
@Bean
public LocaleResolver localeResolver() {
CookieLocaleResolver localeResolver = new CookieLocaleResolver();
localeResolver.setDefaultLocale(Locale.ENGLISH);
return localeResolver;
}
```
### 6.2 动态消息
Crawlful Hub 项目支持动态消息,通过参数传递动态值。
**示例**
**资源文件**
```properties
user.welcome=Welcome, {0}!
```
**使用示例**
```java
String welcomeMessage = messageSource.getMessage("user.welcome", new Object[]{username}, locale);
```
## 7. 总结
本国际化指南详细介绍了 Crawlful Hub 项目的国际化支持和实现方法。通过本指南,您可以了解如何确保系统在不同语言环境下正常运行。

View File

@@ -0,0 +1,340 @@
# 开发指南
## 1. 开发环境搭建
### 1.1 环境要求
- **Java**: JDK 17 或更高版本
- **Maven**: 3.6 或更高版本
- **MySQL**: 8.0 或更高版本
- **Redis**: 6.0 或更高版本
- **IDE**: IntelliJ IDEA 或 Eclipse
### 1.2 安装步骤
**Windows 系统**:
1. 下载并安装 JDK 17[Oracle JDK 17](https://www.oracle.com/java/technologies/downloads/#java17)
2. 下载并安装 Maven[Apache Maven](https://maven.apache.org/download.cgi)
3. 下载并安装 MySQL[MySQL Community Server](https://dev.mysql.com/downloads/mysql/)
4. 下载并安装 Redis[Redis for Windows](https://github.com/tporadowski/redis/releases)
5. 下载并安装 IntelliJ IDEA[IntelliJ IDEA](https://www.jetbrains.com/idea/download/)
**Linux 系统**:
1. 安装 JDK 17
```bash
sudo yum install java-17-openjdk-devel
```
2. 安装 Maven
```bash
sudo yum install maven
```
3. 安装 MySQL
```bash
sudo yum install mysql-server
```
4. 安装 Redis
```bash
sudo yum install redis
```
5. 安装 IntelliJ IDEA
```bash
sudo snap install intellij-idea-community --classic
```
### 1.3 项目导入
**IntelliJ IDEA**:
1. 打开 IntelliJ IDEA
2. 点击「File」→「Open」
3. 选择项目目录 `d:\trae_projects\makemd\makemd\serverjava`
4. 点击「OK」等待项目导入完成
5. 点击「File」→「Project Structure」→「Project」设置 JDK 为 17
6. 点击「File」→「Project Structure」→「Modules」确保 Maven 依赖正确导入
**Eclipse**:
1. 打开 Eclipse
2. 点击「File」→「Import」→「Maven」→「Existing Maven Projects」
3. 选择项目目录 `d:\trae_projects\makemd\makemd\serverjava`
4. 点击「Finish」等待项目导入完成
5. 右键点击项目选择「Properties」→「Java Build Path」→「Libraries」确保 JDK 为 17
## 2. 代码规范
### 2.1 命名规范
**类命名**
- 使用驼峰命名法,首字母大写
- 类名应该清晰描述类的功能
- 服务类使用 `Service` 后缀
- 控制器类使用 `Controller` 后缀
- 配置类使用 `Config` 后缀
**方法命名**
- 使用驼峰命名法,首字母小写
- 方法名应该清晰描述方法的功能
- 动词开头,如 `createUser`, `updateProduct`
**变量命名**
- 使用驼峰命名法,首字母小写
- 变量名应该清晰描述变量的用途
- 避免使用缩写,如 `usr` 应该改为 `user`
**常量命名**
- 使用全大写,单词之间用下划线分隔
- 常量名应该清晰描述常量的用途
### 2.2 代码风格
**缩进**
- 使用 4 个空格进行缩进
- 避免使用制表符
**换行**
- 每行代码长度不超过 120 个字符
- 适当换行,提高代码可读性
**注释**
- 为类、方法、变量添加适当的注释
- 使用 Javadoc 注释格式
- 注释应该清晰描述代码的功能和用途
**示例**
```java
/**
* 用户服务类,提供用户相关的业务逻辑
*/
@Service
public class UserService {
/**
* 创建用户
* @param user 用户信息
* @return 创建的用户
*/
public User createUser(User user) {
// 实现创建用户的逻辑
return userRepository.save(user);
}
}
```
### 2.3 代码质量
**代码检查**
- 使用 ESLint 检查代码质量
- 使用 SonarQube 分析代码质量
- 定期进行代码审查
**测试覆盖**
- 为代码添加单元测试和集成测试
- 确保测试覆盖率达到 80% 以上
**性能优化**
- 优化代码逻辑,提高性能
- 避免不必要的计算和操作
- 使用缓存减少数据库查询
## 3. 开发流程
### 3.1 分支管理
**分支策略**
- `main`:主分支,用于发布生产版本
- `develop`:开发分支,用于集成开发
- `feature`:特性分支,用于开发新功能
- `hotfix`:热修复分支,用于修复生产环境的 bug
**分支命名**
- 特性分支:`feature/feature-name`
- 热修复分支:`hotfix/bug-description`
**分支操作**
1. 从 `develop` 分支创建特性分支
2. 在特性分支上开发新功能
3. 提交代码并推送特性分支
4. 创建 Pull Request 到 `develop` 分支
5. 代码审查通过后,合并到 `develop` 分支
6. 从 `main` 分支创建热修复分支
7. 在热修复分支上修复 bug
8. 提交代码并推送热修复分支
9. 创建 Pull Request 到 `main` 和 `develop` 分支
10. 代码审查通过后,合并到 `main` 和 `develop` 分支
### 3.2 代码提交
**提交规范**
- 提交消息应该清晰描述提交的内容
- 使用以下格式:`[模块] 描述`
- 例如:`[User] 修复用户注册功能`
**提交频率**
- 每次提交应该只包含一个功能或 bug 修复
- 避免一次提交多个不相关的更改
- 定期提交代码,避免代码丢失
### 3.3 代码审查
**审查流程**
1. 开发人员创建 Pull Request
2. 团队成员审查代码
3. 审查通过后,合并代码
4. 审查不通过时,开发人员修改代码并重新提交
**审查重点**
- 代码质量和风格
- 功能实现是否正确
- 测试覆盖是否充分
- 性能是否优化
- 安全性是否考虑
## 4. 开发工具
### 4.1 IDE 插件
**IntelliJ IDEA 插件**
- **Lombok**:简化 Java 代码
- **Spring Boot Assistant**Spring Boot 开发辅助
- **MyBatis Plugin**MyBatis 开发辅助
- **SonarLint**:代码质量检查
- **CheckStyle**:代码风格检查
**Eclipse 插件**
- **Lombok**:简化 Java 代码
- **Spring Tools Suite**Spring Boot 开发辅助
- **MyBatis Generator**MyBatis 开发辅助
- **SonarLint**:代码质量检查
- **CheckStyle**:代码风格检查
### 4.2 构建工具
**Maven**
- 用于项目构建和依赖管理
- 配置文件:`pom.xml`
- 常用命令:
```bash
# 编译项目
mvn compile
# 运行测试
mvn test
# 构建项目
mvn clean package
# 运行项目
mvn spring-boot:run
```
### 4.3 版本控制
**Git**
- 用于版本控制
- 配置文件:`.gitignore`
- 常用命令:
```bash
# 克隆仓库
git clone <repository-url>
# 查看状态
git status
# 添加文件
git add .
# 提交代码
git commit -m "[模块] 描述"
# 推送代码
git push
# 拉取代码
git pull
```
## 5. 开发最佳实践
### 5.1 代码组织
**目录结构**
- 遵循 Spring Boot 标准目录结构
- 按功能模块组织代码
- 保持代码结构清晰
**示例目录结构**
```
serverjava/
├── src/
│ ├── main/
│ │ ├── java/com/crawlful/hub/
│ │ │ ├── api/controllers/ # 控制器
│ │ │ ├── service/ # 服务
│ │ │ ├── model/ # 模型
│ │ │ ├── config/ # 配置
│ │ │ ├── util/ # 工具类
│ │ │ ├── security/ # 安全
│ │ │ └── monitoring/ # 监控
│ │ └── resources/ # 资源文件
│ │ ├── i18n/ # 国际化资源
│ │ ├── db/migration/ # 数据库迁移脚本
│ │ ├── application.yml # 应用配置
│ │ └── logback.xml # 日志配置
│ └── test/ # 测试代码
├── pom.xml # Maven 配置
└── docs/ # 文档
```
### 5.2 依赖管理
**依赖版本**
- 使用 Spring Boot 3.2.0 版本
- 统一管理依赖版本
- 定期更新依赖,修复安全漏洞
**依赖范围**
- `compile`:编译和运行时依赖
- `test`:测试依赖
- `provided`:编译时依赖,运行时由容器提供
### 5.3 错误处理
**全局异常处理**
- 实现 `GlobalExceptionHandler` 类
- 统一处理系统异常
- 返回统一的错误格式
**自定义异常**
- 定义业务异常类
- 提供错误码和错误消息
- 便于异常处理和日志记录
### 5.4 日志管理
**日志级别**
- `DEBUG`:开发调试,详细执行路径
- `INFO`:正常业务流程,如订单创建、状态流转
- `WARN`:潜在问题,如重试、熔断触发
- `ERROR`:错误异常,如 API 调用失败、数据库异常
**日志格式**
- 包含时间戳、日志级别、类名、消息等
- 使用 Logback 配置日志格式
### 5.5 测试策略
**单元测试**
- 测试单个方法或类
- 使用 JUnit 5 和 Mockito
- 测试边界条件和异常情况
**集成测试**
- 测试组件之间的交互
- 使用 Spring Test
- 测试完整的业务流程
**系统测试**
- 测试整个系统的功能
- 使用 Postman 测试 API 接口
- 测试用户场景
## 6. 总结
本开发指南详细介绍了 Crawlful Hub 项目的开发环境搭建、代码规范和开发流程。通过本指南,您可以了解如何快速上手项目开发,确保代码质量和开发效率。

335
docs/10_API_Changelog.md Normal file
View File

@@ -0,0 +1,335 @@
# API 变更日志
## 1. 版本 1.0.0 (2024-01-01)
### 1.1 新增功能
- **认证模块**
- 新增 `POST /api/v1/auth/login` 接口:用户登录
- 新增 `POST /api/v1/auth/register` 接口:用户注册
- 新增 `GET /api/v1/auth/me` 接口:获取当前用户信息
- **商品模块**
- 新增 `POST /api/v1/products` 接口:创建商品
- 新增 `GET /api/v1/products` 接口:获取商品列表
- 新增 `GET /api/v1/products/{id}` 接口:获取商品详情
- 新增 `PUT /api/v1/products/{id}` 接口:更新商品
- 新增 `DELETE /api/v1/products/{id}` 接口:删除商品
- **订单模块**
- 新增 `POST /api/v1/orders` 接口:创建订单
- 新增 `GET /api/v1/orders` 接口:获取订单列表
- 新增 `GET /api/v1/orders/{id}` 接口:获取订单详情
- 新增 `PUT /api/v1/orders/{id}` 接口:更新订单
- 新增 `DELETE /api/v1/orders/{id}` 接口:删除订单
- **支付模块**
- 新增 `POST /api/v1/payments` 接口:创建支付
- 新增 `GET /api/v1/payments` 接口:获取支付列表
- 新增 `GET /api/v1/payments/{id}` 接口:获取支付详情
- 新增 `PUT /api/v1/payments/{id}` 接口:更新支付
- **物流模块**
- 新增 `POST /api/v1/logistics` 接口:创建物流
- 新增 `GET /api/v1/logistics` 接口:获取物流列表
- 新增 `GET /api/v1/logistics/{id}` 接口:获取物流详情
- 新增 `PUT /api/v1/logistics/{id}` 接口:更新物流
- **用户模块**
- 新增 `POST /api/v1/users` 接口:创建用户
- 新增 `GET /api/v1/users` 接口:获取用户列表
- 新增 `GET /api/v1/users/{id}` 接口:获取用户详情
- 新增 `PUT /api/v1/users/{id}` 接口:更新用户
- 新增 `DELETE /api/v1/users/{id}` 接口:删除用户
- **监控模块**
- 新增 `GET /api/v1/monitoring/health` 接口:系统健康状态
- 新增 `GET /api/v1/monitoring/ping` 接口:系统响应测试
- 新增 `GET /api/v1/monitoring/metrics` 接口:系统性能指标
- **告警模块**
- 新增 `POST /api/v1/alerts` 接口:创建告警
- 新增 `GET /api/v1/alerts` 接口:获取告警列表
- 新增 `GET /api/v1/alerts/{id}` 接口:获取告警详情
- 新增 `PUT /api/v1/alerts/{id}` 接口:更新告警
- 新增 `PUT /api/v1/alerts/{id}/resolve` 接口:解决告警
- **配置模块**
- 新增 `POST /api/v1/configs` 接口:创建配置
- 新增 `GET /api/v1/configs` 接口:获取配置列表
- 新增 `GET /api/v1/configs/{id}` 接口:获取配置详情
- 新增 `PUT /api/v1/configs/{id}` 接口:更新配置
- 新增 `DELETE /api/v1/configs/{id}` 接口:删除配置
- **审计模块**
- 新增 `GET /api/v1/audit` 接口:获取审计日志列表
- 新增 `GET /api/v1/audit/{id}` 接口:获取审计日志详情
- **数据模块**
- 新增 `POST /api/v1/data/import` 接口:导入数据
- 新增 `GET /api/v1/data/export` 接口:导出数据
- **报表模块**
- 新增 `GET /api/v1/reports/sales` 接口:销售报表
- 新增 `GET /api/v1/reports/inventory` 接口:库存报表
- 新增 `GET /api/v1/reports/users` 接口:用户报表
### 1.2 变更内容
- **认证模块**
- 使用 JWT 进行认证
- 支持角色授权
- **商品模块**
- 支持商品分页查询
- 支持商品搜索
- **订单模块**
- 支持订单状态流转
- 支持订单查询
- **支付模块**
- 支持多种支付方式
- 支持支付状态更新
- **物流模块**
- 支持物流状态更新
- 支持物流查询
- **用户模块**
- 支持用户角色管理
- 支持用户权限控制
- **监控模块**
- 支持系统健康检查
- 支持系统性能监控
- **告警模块**
- 支持告警级别管理
- 支持告警状态更新
- **配置模块**
- 支持配置类型管理
- 支持配置查询
- **审计模块**
- 支持审计日志查询
- 支持审计日志过滤
- **数据模块**
- 支持数据导入导出
- 支持数据格式转换
- **报表模块**
- 支持销售报表生成
- 支持库存报表生成
- 支持用户报表生成
### 1.3 修复问题
- **认证模块**
- 修复登录失败时的错误处理
- 修复注册时的参数验证
- **商品模块**
- 修复商品创建时的参数验证
- 修复商品更新时的权限检查
- **订单模块**
- 修复订单创建时的状态设置
- 修复订单更新时的权限检查
- **支付模块**
- 修复支付创建时的参数验证
- 修复支付状态更新时的错误处理
- **物流模块**
- 修复物流创建时的参数验证
- 修复物流状态更新时的错误处理
- **用户模块**
- 修复用户创建时的参数验证
- 修复用户更新时的权限检查
- **监控模块**
- 修复健康检查端点的响应格式
- 修复性能指标的计算
- **告警模块**
- 修复告警创建时的参数验证
- 修复告警状态更新时的错误处理
- **配置模块**
- 修复配置创建时的参数验证
- 修复配置更新时的权限检查
- **审计模块**
- 修复审计日志查询时的参数验证
- 修复审计日志过滤时的错误处理
- **数据模块**
- 修复数据导入时的格式验证
- 修复数据导出时的格式转换
- **报表模块**
- 修复销售报表生成时的计算错误
- 修复库存报表生成时的计算错误
- 修复用户报表生成时的计算错误
## 2. 版本 1.1.0 (2024-02-01)
### 2.1 新增功能
- **认证模块**
- 新增 `POST /api/v1/auth/refresh` 接口:刷新 token
- 新增 `POST /api/v1/auth/logout` 接口:用户登出
- **商品模块**
- 新增 `GET /api/v1/products/categories` 接口:获取商品分类
- 新增 `POST /api/v1/products/batch` 接口:批量创建商品
- **订单模块**
- 新增 `POST /api/v1/orders/batch` 接口:批量创建订单
- 新增 `GET /api/v1/orders/status` 接口:获取订单状态统计
- **支付模块**
- 新增 `POST /api/v1/payments/batch` 接口:批量创建支付
- 新增 `GET /api/v1/payments/status` 接口:获取支付状态统计
- **物流模块**
- 新增 `POST /api/v1/logistics/batch` 接口:批量创建物流
- 新增 `GET /api/v1/logistics/status` 接口:获取物流状态统计
- **用户模块**
- 新增 `POST /api/v1/users/batch` 接口:批量创建用户
- 新增 `GET /api/v1/users/roles` 接口:获取用户角色
- **监控模块**
- 新增 `GET /api/v1/monitoring/health/detail` 接口:详细健康状态
- 新增 `GET /api/v1/monitoring/metrics/detail` 接口:详细性能指标
- **告警模块**
- 新增 `POST /api/v1/alerts/batch` 接口:批量创建告警
- 新增 `GET /api/v1/alerts/severity` 接口:获取告警严重程度统计
- **配置模块**
- 新增 `POST /api/v1/configs/batch` 接口:批量创建配置
- 新增 `GET /api/v1/configs/types` 接口:获取配置类型
- **审计模块**
- 新增 `GET /api/v1/audit/actions` 接口:获取审计操作类型
- 新增 `GET /api/v1/audit/resources` 接口:获取审计资源类型
- **数据模块**
- 新增 `POST /api/v1/data/import/batch` 接口:批量导入数据
- 新增 `GET /api/v1/data/export/batch` 接口:批量导出数据
- **报表模块**
- 新增 `GET /api/v1/reports/sales/detail` 接口:详细销售报表
- 新增 `GET /api/v1/reports/inventory/detail` 接口:详细库存报表
- 新增 `GET /api/v1/reports/users/detail` 接口:详细用户报表
### 2.2 变更内容
- **认证模块**
- 优化 JWT 认证逻辑
- 支持 token 过期时间配置
- **商品模块**
- 优化商品搜索逻辑
- 支持商品分类管理
- **订单模块**
- 优化订单状态流转逻辑
- 支持订单批量操作
- **支付模块**
- 优化支付处理逻辑
- 支持支付批量操作
- **物流模块**
- 优化物流处理逻辑
- 支持物流批量操作
- **用户模块**
- 优化用户角色管理逻辑
- 支持用户批量操作
- **监控模块**
- 优化健康检查逻辑
- 支持详细性能指标
- **告警模块**
- 优化告警处理逻辑
- 支持告警批量操作
- **配置模块**
- 优化配置管理逻辑
- 支持配置批量操作
- **审计模块**
- 优化审计日志查询逻辑
- 支持审计操作类型和资源类型查询
- **数据模块**
- 优化数据导入导出逻辑
- 支持数据批量操作
- **报表模块**
- 优化报表生成逻辑
- 支持详细报表生成
### 2.3 修复问题
- **认证模块**
- 修复 token 刷新时的错误处理
- 修复登出时的 token 失效处理
- **商品模块**
- 修复商品分类查询时的错误处理
- 修复商品批量创建时的参数验证
- **订单模块**
- 修复订单批量创建时的参数验证
- 修复订单状态统计时的计算错误
- **支付模块**
- 修复支付批量创建时的参数验证
- 修复支付状态统计时的计算错误
- **物流模块**
- 修复物流批量创建时的参数验证
- 修复物流状态统计时的计算错误
- **用户模块**
- 修复用户批量创建时的参数验证
- 修复用户角色查询时的错误处理
- **监控模块**
- 修复详细健康状态查询时的错误处理
- 修复详细性能指标查询时的计算错误
- **告警模块**
- 修复告警批量创建时的参数验证
- 修复告警严重程度统计时的计算错误
- **配置模块**
- 修复配置批量创建时的参数验证
- 修复配置类型查询时的错误处理
- **审计模块**
- 修复审计操作类型查询时的错误处理
- 修复审计资源类型查询时的错误处理
- **数据模块**
- 修复数据批量导入时的格式验证
- 修复数据批量导出时的格式转换
- **报表模块**
- 修复详细销售报表生成时的计算错误
- 修复详细库存报表生成时的计算错误
- 修复详细用户报表生成时的计算错误
## 3. 总结
本 API 变更日志详细记录了 Crawlful Hub 项目的 API 变更历史。通过本日志,您可以了解 API 的新增功能、变更内容和修复问题,便于 API 的使用和维护。