- 迁移25个模块,包含95个控制器和160个服务 - 新增验证码管理、登录配置、云编译等模块 - 完善认证授权、会员管理、支付系统等核心功能 - 实现完整的队列系统、配置管理、监控体系 - 确保100%功能对齐和命名一致性 - 支持生产环境部署
472 lines
12 KiB
Markdown
472 lines
12 KiB
Markdown
# NiuCloud PHP → NestJS 迁移策略智能体工作流
|
||
|
||
## 迁移概述
|
||
|
||
### 目标
|
||
将 NiuCloud PHP 版本完整迁移到 NestJS,保持业务逻辑100%一致,同时充分利用 NestJS 现代化特性。
|
||
|
||
### 迁移范围
|
||
- **核心模块**:用户认证、站点管理、权限控制、系统配置
|
||
- **业务模块**:插件系统、文件管理、通知系统、日志系统
|
||
- **基础设施**:数据库、缓存、队列、事件系统
|
||
- **API接口**:管理端 `/adminapi`、前台 `/api` 接口
|
||
|
||
## 智能体工作流设计
|
||
|
||
### 阶段1:迁移分析体 (MigrationAnalyzer) - S1
|
||
|
||
#### 职责
|
||
- 分析 PHP 代码结构,识别核心模块和依赖关系
|
||
- 制定迁移优先级和模块划分策略
|
||
- 输出迁移计划和风险评估报告
|
||
|
||
#### 工作内容
|
||
1. **代码结构分析**
|
||
```bash
|
||
# 分析 PHP 项目结构
|
||
- app/adminapi/controller/ # 管理端控制器
|
||
- app/api/controller/ # 前台控制器
|
||
- app/service/ # 业务服务层
|
||
- app/model/ # 数据模型层
|
||
- app/validate/ # 验证层
|
||
- core/ # 核心框架
|
||
```
|
||
|
||
2. **依赖关系映射**
|
||
- 识别模块间依赖关系
|
||
- 分析数据库表结构
|
||
- 梳理配置项和常量定义
|
||
|
||
3. **迁移优先级排序**
|
||
```
|
||
优先级1:基础设施 (数据库、缓存、队列)
|
||
优先级2:核心模块 (用户、权限、站点)
|
||
优先级3:业务模块 (插件、文件、通知)
|
||
优先级4:扩展功能 (统计、报表、工具)
|
||
```
|
||
|
||
#### 输出产物
|
||
- 迁移分析报告
|
||
- 模块依赖关系图
|
||
- 数据库表结构映射
|
||
- 迁移时间估算
|
||
|
||
### 阶段2:架构设计体 (ArchitectureDesigner) - S2
|
||
|
||
#### 职责
|
||
- 设计 NestJS 项目架构
|
||
- 定义模块边界和接口规范
|
||
- 制定代码规范和目录结构
|
||
|
||
#### 工作内容
|
||
1. **项目结构设计**
|
||
```
|
||
wwjcloud/
|
||
├── src/
|
||
│ ├── common/ # 通用模块
|
||
│ │ ├── auth/ # 认证授权
|
||
│ │ ├── guards/ # 守卫
|
||
│ │ ├── interceptors/ # 拦截器
|
||
│ │ └── pipes/ # 管道
|
||
│ ├── site/ # 站点管理
|
||
│ ├── user/ # 用户管理
|
||
│ ├── addon/ # 插件系统
|
||
│ ├── config/ # 系统配置
|
||
│ ├── file/ # 文件管理
|
||
│ └── notification/ # 通知系统
|
||
├── config/ # 配置管理
|
||
├── core/ # 核心基础设施
|
||
└── vendor/ # 第三方服务
|
||
```
|
||
|
||
2. **接口规范定义**
|
||
- RESTful API 设计规范
|
||
- 响应格式统一标准
|
||
- 错误处理机制
|
||
|
||
3. **数据模型设计**
|
||
- Entity 实体定义
|
||
- DTO 数据传输对象
|
||
- Repository 仓储接口
|
||
|
||
#### 输出产物
|
||
- 架构设计文档
|
||
- API 接口规范
|
||
- 数据模型设计
|
||
- 代码规范指南
|
||
|
||
### 阶段3:基础设施体 (InfrastructureBuilder) - S3
|
||
|
||
#### 职责
|
||
- 搭建 NestJS 基础框架
|
||
- 配置数据库、缓存、队列等基础设施
|
||
- 实现核心中间件和工具类
|
||
|
||
#### 工作内容
|
||
1. **项目初始化**
|
||
```bash
|
||
# 创建 NestJS 项目
|
||
nest new wwjcloud
|
||
npm install @nestjs/typeorm typeorm mysql2
|
||
npm install @nestjs/config @nestjs/cache-manager
|
||
npm install @nestjs/schedule @nestjs/queue
|
||
```
|
||
|
||
2. **数据库配置**
|
||
```typescript
|
||
// config/database.config.ts
|
||
export const databaseConfig = {
|
||
type: 'mysql',
|
||
host: process.env.DB_HOST,
|
||
port: parseInt(process.env.DB_PORT),
|
||
username: process.env.DB_USERNAME,
|
||
password: process.env.DB_PASSWORD,
|
||
database: process.env.DB_DATABASE,
|
||
entities: ['dist/**/*.entity{.ts,.js}'],
|
||
synchronize: false,
|
||
logging: process.env.NODE_ENV === 'development',
|
||
};
|
||
```
|
||
|
||
3. **核心中间件实现**
|
||
- 认证守卫 (JwtAuthGuard)
|
||
- 权限守卫 (RolesGuard)
|
||
- 请求日志拦截器
|
||
- 响应转换拦截器
|
||
|
||
#### 输出产物
|
||
- 基础框架代码
|
||
- 配置文件模板
|
||
- 中间件实现
|
||
- 工具类库
|
||
|
||
### 阶段4:核心模块体 (CoreModuleMigrator) - S4
|
||
|
||
#### 职责
|
||
- 迁移核心业务模块
|
||
- 实现数据模型和业务逻辑
|
||
- 编写单元测试和集成测试
|
||
|
||
#### 工作内容
|
||
1. **用户认证模块迁移**
|
||
```typescript
|
||
// src/common/auth/auth.module.ts
|
||
@Module({
|
||
imports: [JwtModule, PassportModule],
|
||
providers: [AuthService, JwtStrategy],
|
||
exports: [AuthService],
|
||
})
|
||
export class AuthModule {}
|
||
```
|
||
|
||
2. **站点管理模块迁移**
|
||
```typescript
|
||
// src/site/site.entity.ts
|
||
@Entity('site')
|
||
export class Site {
|
||
@PrimaryGeneratedColumn()
|
||
siteId: number;
|
||
|
||
@Column({ length: 100 })
|
||
siteName: string;
|
||
|
||
@Column({ type: 'int', default: 1 })
|
||
status: number;
|
||
}
|
||
```
|
||
|
||
3. **权限控制模块迁移**
|
||
- 角色权限管理
|
||
- 菜单权限控制
|
||
- 数据权限隔离
|
||
|
||
#### 输出产物
|
||
- 核心模块代码
|
||
- 单元测试用例
|
||
- API 接口实现
|
||
- 数据库迁移脚本
|
||
|
||
### 阶段5:业务模块体 (BusinessModuleMigrator) - S5
|
||
|
||
#### 职责
|
||
- 迁移业务功能模块
|
||
- 实现复杂业务逻辑
|
||
- 处理第三方服务集成
|
||
|
||
#### 工作内容
|
||
1. **插件系统迁移**
|
||
```typescript
|
||
// src/addon/addon.service.ts
|
||
@Injectable()
|
||
export class AddonService {
|
||
async installAddon(addonKey: string, siteId: number): Promise<void> {
|
||
// 插件安装逻辑
|
||
await this.validateAddon(addonKey);
|
||
await this.installDependencies(addonKey);
|
||
await this.executeInstallScript(addonKey, siteId);
|
||
}
|
||
}
|
||
```
|
||
|
||
2. **文件管理模块迁移**
|
||
- 文件上传下载
|
||
- 图片处理服务
|
||
- 云存储集成
|
||
|
||
3. **通知系统迁移**
|
||
- 消息推送
|
||
- 邮件发送
|
||
- 短信通知
|
||
|
||
#### 输出产物
|
||
- 业务模块代码
|
||
- 第三方服务集成
|
||
- 业务测试用例
|
||
- 性能优化建议
|
||
|
||
### 阶段6:API接口体 (ApiInterfaceMigrator) - S6
|
||
|
||
#### 职责
|
||
- 实现完整的 API 接口
|
||
- 确保接口兼容性
|
||
- 编写接口文档
|
||
|
||
#### 工作内容
|
||
1. **管理端接口迁移**
|
||
```typescript
|
||
// src/site/site.controller.ts
|
||
@Controller('adminapi/site')
|
||
@UseGuards(JwtAuthGuard, RolesGuard)
|
||
export class SiteController {
|
||
@Get('site')
|
||
@Roles('admin')
|
||
async list(@Query() searchParam: SiteSearchParam): Promise<Result<PageResult<Site>>> {
|
||
return Result.success(await this.siteService.list(searchParam));
|
||
}
|
||
}
|
||
```
|
||
|
||
2. **前台接口迁移**
|
||
- 用户注册登录
|
||
- 站点信息获取
|
||
- 插件功能接口
|
||
|
||
3. **接口文档生成**
|
||
- Swagger 文档配置
|
||
- API 测试用例
|
||
- 接口兼容性测试
|
||
|
||
#### 输出产物
|
||
- 完整 API 接口
|
||
- Swagger 文档
|
||
- 接口测试用例
|
||
- 兼容性报告
|
||
|
||
### 阶段7:数据迁移体 (DataMigrationEngineer) - S7
|
||
|
||
#### 职责
|
||
- 设计数据迁移策略
|
||
- 实现数据转换脚本
|
||
- 确保数据完整性
|
||
|
||
#### 工作内容
|
||
1. **数据库迁移脚本**
|
||
```typescript
|
||
// migrations/001-initial-schema.ts
|
||
export class InitialSchema implements MigrationInterface {
|
||
async up(queryRunner: QueryRunner): Promise<void> {
|
||
await queryRunner.createTable(new Table({
|
||
name: 'site',
|
||
columns: [
|
||
{ name: 'site_id', type: 'int', isPrimary: true, isGenerated: true },
|
||
{ name: 'site_name', type: 'varchar', length: '100' },
|
||
{ name: 'status', type: 'int', default: 1 },
|
||
]
|
||
}));
|
||
}
|
||
}
|
||
```
|
||
|
||
2. **数据转换脚本**
|
||
- PHP 数据格式转换
|
||
- 字段映射关系处理
|
||
- 数据验证和清理
|
||
|
||
3. **迁移测试**
|
||
- 数据完整性验证
|
||
- 性能测试
|
||
- 回滚机制测试
|
||
|
||
#### 输出产物
|
||
- 数据库迁移脚本
|
||
- 数据转换工具
|
||
- 迁移测试报告
|
||
- 回滚方案
|
||
|
||
### 阶段8:质量保证体 (QualityAssuranceGuard) - S8
|
||
|
||
#### 职责
|
||
- 代码质量检查
|
||
- 功能完整性验证
|
||
- 性能和安全测试
|
||
|
||
#### 工作内容
|
||
1. **代码质量检查**
|
||
```bash
|
||
# ESLint 检查
|
||
npm run lint
|
||
|
||
# TypeScript 类型检查
|
||
npm run type-check
|
||
|
||
# 测试覆盖率检查
|
||
npm run test:cov
|
||
```
|
||
|
||
2. **功能完整性验证**
|
||
- 核心功能测试
|
||
- 边界条件测试
|
||
- 异常情况处理
|
||
|
||
3. **性能和安全测试**
|
||
- 接口性能测试
|
||
- 安全漏洞扫描
|
||
- 负载压力测试
|
||
|
||
#### 输出产物
|
||
- 质量检查报告
|
||
- 测试结果汇总
|
||
- 性能优化建议
|
||
- 安全评估报告
|
||
|
||
### 阶段9:部署上线体 (DeploymentManager) - S9
|
||
|
||
#### 职责
|
||
- 制定部署策略
|
||
- 实现 CI/CD 流程
|
||
- 监控和运维支持
|
||
|
||
#### 工作内容
|
||
1. **部署配置**
|
||
```yaml
|
||
# docker-compose.yml
|
||
version: '3.8'
|
||
services:
|
||
app:
|
||
build: .
|
||
ports:
|
||
- "3000:3000"
|
||
environment:
|
||
- NODE_ENV=production
|
||
- DB_HOST=mysql
|
||
depends_on:
|
||
- mysql
|
||
- redis
|
||
```
|
||
|
||
2. **CI/CD 流程**
|
||
- GitHub Actions 配置
|
||
- 自动化测试
|
||
- 自动化部署
|
||
|
||
3. **监控和日志**
|
||
- 应用性能监控
|
||
- 错误日志收集
|
||
- 健康检查接口
|
||
|
||
#### 输出产物
|
||
- 部署配置文件
|
||
- CI/CD 流程文档
|
||
- 监控配置
|
||
- 运维手册
|
||
|
||
## 迁移检查点
|
||
|
||
### 检查点1:基础框架 (完成 S3 后)
|
||
- [ ] NestJS 项目结构完整
|
||
- [ ] 数据库连接正常
|
||
- [ ] 基础中间件可用
|
||
- [ ] 配置文件正确
|
||
|
||
### 检查点2:核心功能 (完成 S4 后)
|
||
- [ ] 用户认证功能正常
|
||
- [ ] 站点管理功能完整
|
||
- [ ] 权限控制有效
|
||
- [ ] 单元测试通过
|
||
|
||
### 检查点3:业务功能 (完成 S5 后)
|
||
- [ ] 插件系统可用
|
||
- [ ] 文件管理正常
|
||
- [ ] 通知系统工作
|
||
- [ ] 第三方服务集成
|
||
|
||
### 检查点4:接口完整 (完成 S6 后)
|
||
- [ ] 所有 API 接口实现
|
||
- [ ] 接口文档完整
|
||
- [ ] 兼容性测试通过
|
||
- [ ] 性能测试达标
|
||
|
||
### 检查点5:数据迁移 (完成 S7 后)
|
||
- [ ] 数据迁移成功
|
||
- [ ] 数据完整性验证
|
||
- [ ] 回滚机制可用
|
||
- [ ] 迁移性能达标
|
||
|
||
### 检查点6:质量保证 (完成 S8 后)
|
||
- [ ] 代码质量达标
|
||
- [ ] 功能测试通过
|
||
- [ ] 安全测试通过
|
||
- [ ] 性能测试通过
|
||
|
||
### 检查点7:部署上线 (完成 S9 后)
|
||
- [ ] 部署配置正确
|
||
- [ ] CI/CD 流程正常
|
||
- [ ] 监控系统工作
|
||
- [ ] 运维文档完整
|
||
|
||
## 验收标准
|
||
|
||
### 功能完整性
|
||
- [ ] 100% 功能迁移完成
|
||
- [ ] 所有 API 接口可用
|
||
- [ ] 数据操作正常
|
||
- [ ] 第三方服务集成
|
||
|
||
### 性能要求
|
||
- [ ] 接口响应时间 < 200ms
|
||
- [ ] 并发用户数 > 1000
|
||
- [ ] 数据库查询优化
|
||
- [ ] 缓存命中率 > 80%
|
||
|
||
### 质量要求
|
||
- [ ] 代码覆盖率 > 80%
|
||
- [ ] ESLint 无错误
|
||
- [ ] TypeScript 类型安全
|
||
- [ ] 安全漏洞为 0
|
||
|
||
### 兼容性要求
|
||
- [ ] 前端接口兼容
|
||
- [ ] 数据库结构兼容
|
||
- [ ] 配置文件兼容
|
||
- [ ] 第三方服务兼容
|
||
|
||
## 风险控制
|
||
|
||
### 技术风险
|
||
- **数据丢失风险**:建立完整的数据备份和回滚机制
|
||
- **性能下降风险**:进行充分的性能测试和优化
|
||
- **兼容性问题**:保持接口和数据结构兼容性
|
||
|
||
### 进度风险
|
||
- **时间延期风险**:设置里程碑检查点,及时调整计划
|
||
- **资源不足风险**:合理分配开发资源,优先核心功能
|
||
- **质量风险**:建立质量门禁,确保代码质量
|
||
|
||
### 业务风险
|
||
- **功能缺失风险**:建立功能清单,确保完整迁移
|
||
- **用户体验风险**:保持接口一致性,避免用户体验下降
|
||
- **运维风险**:建立完善的监控和运维体系
|
||
|
||
## 总结
|
||
|
||
这个迁移策略智能体工作流确保了从 PHP 到 NestJS 的完整迁移,通过 9 个阶段的系统化工作,每个阶段都有明确的职责、工作内容和输出产物,同时设置了 7 个关键检查点来保证迁移质量。整个流程注重风险控制和质量保证,确保迁移后的系统功能完整、性能优良、质量可靠。 |