chore(release): unify to wwjcloud across backend/frontend; routes, DTO/VO paths, docs/links; remove niucloud; naming fixes
This commit is contained in:
@@ -1,36 +1,48 @@
|
||||
---
|
||||
description:
|
||||
description: Java后端迁移到v1框架的智能体工作流程规则
|
||||
globs:
|
||||
alwaysApply: true
|
||||
---
|
||||
## 智能体工作流程(多智能体协作)
|
||||
## 智能体工作流程(多智能体协作 - Java迁移版)
|
||||
|
||||
### 角色定义(按执行顺序标注)
|
||||
- S1 需求分析体(Analyzer): 解析需求、对应 PHP/Nest 规范、输出任务切分与验收标准
|
||||
- S2 架构治理体(Architect): 校验分层/依赖/目录规范,给出重构建议与边界清单
|
||||
- S1 需求分析体(Analyzer): 解析Java项目结构、建立元数据索引、输出Java→NestJS映射关系
|
||||
- S2 架构治理体(Architect): 校验分层/依赖/目录规范,确保与Java架构对齐
|
||||
- S3 基建接入体(InfraOperator): 接入/校验 Kafka、Redis、队列、事务与配置,提供接入差异与示例
|
||||
- S4 开发执行体(Developer): 按规范编码、编写测试、修复构建
|
||||
- S4 开发执行体(Developer): 使用迁移工具生成代码,按Java逻辑对齐业务实现
|
||||
- S5 安全基线体(SecurityGuard): 检查守卫、跨租户(site_id)隔离、敏感信息暴露(开发中与提测前各执行一次)
|
||||
- S6 质量门禁体(QualityGate): 聚合 ESLint/TS/覆盖率/e2e 结果,低于阈值阻断合并
|
||||
- S7 规范审计体(Auditor): 按清单逐项核查,出具差异报告与修复项
|
||||
- S7 规范审计体(Auditor): 按Java迁移清单逐项核查,确保与Java版本100%一致
|
||||
- S8 上线管控体(Release): 构建、变更说明、灰度计划与回滚预案
|
||||
- S9 性能优化体(PerfTuner): 建议缓存/异步化/批处理,识别大对象传输与 N+1(开发后期与上线后持续执行)
|
||||
|
||||
### 串联流程(带顺序)
|
||||
1) S1 Analyzer
|
||||
- 输入: 业务需求/接口变更/对齐 PHP 的说明
|
||||
- 输出: 模块划分、路由表、DTO、实体字段清单、与 DB/ThinkPHP 对照
|
||||
|
||||
1) S1 Analyzer (Java迁移版)
|
||||
- 输入: Java项目扫描结果、业务逻辑对齐需求
|
||||
- 输出: Java→NestJS映射关系、方法签名对比、依赖关系分析
|
||||
- 执行:
|
||||
- 运行迁移工具 `tools/java-to-nestjs-migration/migration-coordinator.js` 扫描Java项目
|
||||
- 构建中央数据仓库(CDR):Service方法签名索引、DTO类型映射、实体映射关系
|
||||
- 生成映射报告:Java文件→NestJS文件映射表、方法签名对比表、依赖关系分析报告
|
||||
|
||||
2) S2 Architect
|
||||
- 校验: 模块目录、分层(Application/Core/Infrastructure)、依赖方向(App→Common→Core→Vendor)
|
||||
- 校验: 模块目录、分层结构、依赖方向(确保与Java架构对齐)
|
||||
- 输出: 设计说明、端口(Repository/Provider)定义、删除/迁移建议
|
||||
- 重点: 确保动态模块加载机制正确(EntityModule.register()、ServiceModule.register()、ControllerModule.register())
|
||||
|
||||
3) S3 InfraOperator
|
||||
- 接入: Kafka/Redis/队列/事务的工程化接入与配置
|
||||
- 产物: 接入差异与示例代码(见 integration.md),健康检查/配置项校验清单
|
||||
- 产物: 接入差异与示例代码,健康检查/配置项校验清单
|
||||
- 注意: 使用v1框架能力(AuthService、CacheService、AppConfigService)
|
||||
|
||||
4) S4 Developer
|
||||
- 实现: Controller 仅路由+DTO校验;AppService 编排;Core 规则;Infra 实现;Entity 对齐 DB
|
||||
- **Java迁移执行步骤**:
|
||||
1. 使用迁移工具生成代码骨架(Entity、DTO、Service、Controller)
|
||||
2. 按模块优先级逐个对齐Java业务逻辑(P0核心→P1基础→P2业务→P3扩展)
|
||||
3. 严格对齐方法签名、参数处理、返回值、异常处理、数据库操作
|
||||
4. 使用v1框架能力(AuthService、CacheService、AppConfigService、工具类)
|
||||
5. 禁止自创业务逻辑,必须完全按照Java实现
|
||||
- 接入: 守卫(RBAC)、Pipes(JSON/Timestamp)、拦截器(请求日志)、事件与队列
|
||||
- 测试: 单测/集成/e2e,构建通过
|
||||
|
||||
@@ -41,8 +53,14 @@ alwaysApply: true
|
||||
- 指标: ESLint/TS 无报错;覆盖率≥阈值;e2e 关键路径通过
|
||||
- 动作: 不达标阻断合并
|
||||
|
||||
7) S7 Auditor(提测前)
|
||||
- 检查: 规范清单(见 checklists.md),字段/命名/路由/守卫/事务/队列/事件 与 PHP/DB 对齐
|
||||
7) S7 Auditor(提测前 - Java迁移版)
|
||||
- **Java迁移审计检查点**:
|
||||
- 检查方法签名是否与Java完全一致
|
||||
- 检查API路径、HTTP方法、参数名是否与Java一致
|
||||
- 检查响应格式、错误码、异常消息是否与Java一致
|
||||
- 检查数据库操作是否与Java逻辑一致
|
||||
- 检查是否使用了框架能力而非自创逻辑
|
||||
- 检查表名、字段名是否与Java完全一致(禁止修改)
|
||||
- 产物: 差异报告与修复任务
|
||||
|
||||
8) S5 SecurityGuard(第二次,提测前)
|
||||
@@ -54,49 +72,136 @@ alwaysApply: true
|
||||
10) S8 Release
|
||||
- 产出: 变更日志、部署步骤、数据迁移脚本、回滚预案
|
||||
|
||||
### 关键约束
|
||||
- 与 PHP 业务/数据100%一致;与 NestJS 规范100%匹配
|
||||
### 关键约束(Java迁移)
|
||||
|
||||
- **核心原则**:与 Java 业务逻辑100%对齐;数据库结构100%对齐;API接口100%对齐
|
||||
- **优先原则**:优先对齐Java逻辑,再优化框架特性;禁止自创业务逻辑
|
||||
- **数据库约束**:禁止修改表名、字段名、字段类型、索引结构(必须与Java完全一致)
|
||||
- **API约束**:路由路径、HTTP方法、参数名、响应格式、错误码必须与Java一致
|
||||
- 禁止创建 DB 不存在字段;`sys_config.value(JSON)` 统一
|
||||
- 管理端路由 `/adminapi`,前台 `/api`;统一守卫与响应格式
|
||||
- 管理端路由 `/adminapi`,前台 `/api`;统一守卫与响应格式
|
||||
|
||||
### 基础能力检查点(Kafka / Redis / 队列 / 事务)
|
||||
|
||||
- 事务: 仅在 Application 开启;多仓储共享同一 EntityManager;Core 不直接操作事务对象
|
||||
- 队列: 用例完成后入队;载荷仅传关键 ID;处理器在 Infrastructure;按队列名分域
|
||||
- 事件: 统一用 DomainEventService;事件名 `domain.aggregate.action`;默认 DB Outbox,可切 Kafka
|
||||
- Redis: 短缓存配置读取、上传限流/防刷(计数器)、幂等(SETNX+TTL)
|
||||
|
||||
### 命名与对齐
|
||||
- PHP 业务命名优先(不违反 Nest/TS 规范前提下),包括服务方法、DTO 字段、配置键
|
||||
- Nest 特有类型按规范命名:`*.module.ts`、`*.controller.ts`、`*.app.service.ts`、`*.core.service.ts`
|
||||
### 命名与对齐(Java迁移)
|
||||
|
||||
- **Java业务命名优先**(不违反 Nest/TS 规范前提下),包括服务方法、DTO 字段
|
||||
- **表名、字段名必须与Java完全一致**(禁止修改)
|
||||
- **Service实现类命名规则**:
|
||||
- Java `ServiceImpl` → NestJS `ServiceImpl`(保持原样,不添加Service后缀)
|
||||
- Java `IService` → NestJS `Service`(接口,去掉I前缀)
|
||||
- **动态模块加载**:使用 `EntityModule.register()`、`ServiceModule.register()`、`ControllerModule.register()`
|
||||
- Nest 特有类型按规范命名:`*.module.ts`、`*.controller.ts`、`*.service.ts`、`*.entity.ts`、`*.dto.ts`
|
||||
|
||||
### 核心链接
|
||||
- 模块映射: `./mapping.md`
|
||||
- 能力集成: `./integration.md`
|
||||
- 规则与清单: `./rules.md`、`./checklists.md`
|
||||
|
||||
- **Java迁移方案**: `./java-migration.mdc`(完整迁移方案和规则)
|
||||
- **迁移工具**: `tools/java-to-nestjs-migration/`(迁移工具目录)
|
||||
- **迁移报告**: `tools/java-to-nestjs-migration/migration-report.json`(迁移报告)
|
||||
|
||||
### 执行与验收(CI/PR 建议)
|
||||
|
||||
- PR 必须通过: build、单测/集成/e2e
|
||||
- 审计体根据 `checklists.md` 自动评论差异(字段/命名/路由/守卫/事务/队列/事件)
|
||||
- 安全基线: 管理端控制器统一 `JwtAuthGuard + RolesGuard`;/adminapi 与 /api 路由前缀
|
||||
- 审计体根据 `java-migration.mdc` 自动检查Java对齐情况
|
||||
- 安全基线: 管理端控制器统一 `JwtAuthGuard + RolesGuard`;/adminapi 与 /api 路由前缀
|
||||
|
||||
### 目录职能速查(防误用)
|
||||
- common/(框架通用服务层)
|
||||
- 放可被业务复用的通用功能:用户/权限/菜单/上传/通知/设置等模块
|
||||
- 内部模块按 Controller / Application / Core / Infrastructure / Entities / DTO 分层
|
||||
- 禁止依赖 App 层;允许依赖 core/, config/, vendor/
|
||||
- config/(配置与适配)
|
||||
- 环境变量、数据库/HTTP/安全/队列/第三方等配置模块与注入工厂
|
||||
- 仅存放配置与适配代码,不放业务逻辑
|
||||
- core/(核心基础设施与通用规则)
|
||||
- 通用规则/策略与仓储接口(Core 层),以及全局基础设施(如队列、事件、健康、拦截器)
|
||||
- 不直接依赖业务模块;面向 common/app 提供能力
|
||||
- vendor/(第三方适配层)
|
||||
- 外部服务适配:存储/支付/短信/HTTP/Kafka/Redis 等 Provider
|
||||
- 通过接口注入到 Infrastructure 或 Application,避免在 Controller 直接使用
|
||||
- lang/(多语言)
|
||||
- 多语言资源与语言包,供接口/异常/文案统一输出
|
||||
- 智能体在涉及文案/错误消息时,优先调用多语言键值而非写死文本
|
||||
- test/(测试)
|
||||
- 单元/集成/e2e 测试,包含关键业务与基础能力(事务/队列/事件/权限)覆盖
|
||||
### 目录职能速查(Java迁移项目 - v1框架)
|
||||
|
||||
- PR 必须通过测试基线,质量门禁体(QualityGate)据此决策
|
||||
#### 核心目录结构:
|
||||
- **entities/**(实体层)
|
||||
- TypeORM实体文件,表名、字段名必须与Java完全一致
|
||||
- 由迁移工具自动生成,禁止手动修改表结构
|
||||
- 文件命名:`*.entity.ts`(如 `sys-user.entity.ts`)
|
||||
|
||||
- **dtos/**(数据传输对象层)
|
||||
- DTO/VO/Param文件,字段名、类型必须与Java一致
|
||||
- 目录结构:`dtos/admin/*/*.dto.ts`、`dtos/api/*/*.dto.ts`、`dtos/core/*/*.dto.ts`
|
||||
- 由迁移工具自动生成,需要手动对齐验证规则
|
||||
|
||||
- **services/**(服务层)
|
||||
- **admin/**:管理端服务(对应Java `service.admin`)
|
||||
- **api/**:前台服务(对应Java `service.api`)
|
||||
- **core/**:核心服务(对应Java `service.core`)
|
||||
- 使用动态模块加载:`ServiceModule.register()`
|
||||
- 文件命名:`*-service-impl.service.ts`(实现类)
|
||||
|
||||
- **controllers/**(控制器层)
|
||||
- **adminapi/**:管理端控制器(对应Java `controller.adminapi`)
|
||||
- **api/**:前台控制器(对应Java `controller.api`)
|
||||
- 使用动态模块加载:`ControllerModule.register()`
|
||||
- 文件命名:`*.controller.ts`
|
||||
|
||||
- **entity.module.ts、service.module.ts、controller.module.ts**
|
||||
- 动态模块文件,由迁移工具自动生成
|
||||
- 自动扫描并注册所有实体、服务、控制器
|
||||
- 必须使用 `.register()` 方法注册
|
||||
|
||||
- **jobs/**(定时任务层)
|
||||
- 定时任务文件,对应Java `job.*`
|
||||
- 使用 `JobProviderRegistry` 注册
|
||||
|
||||
- **listeners/**(监听器层)
|
||||
- 事件监听器文件,对应Java `listener.*`
|
||||
|
||||
- **enums/**(枚举层)
|
||||
- 枚举文件,对应Java枚举类
|
||||
|
||||
#### 模块优先级(对齐顺序):
|
||||
|
||||
1. **P0 核心模块**:认证、权限、用户管理
|
||||
- `services/admin/auth/*`
|
||||
- `services/admin/user/*`
|
||||
- `services/admin/rbac/*`
|
||||
|
||||
2. **P1 基础模块**:配置、菜单、字典
|
||||
- `services/admin/sys/*`
|
||||
- `services/core/config/*`
|
||||
|
||||
3. **P2 业务模块**:业务功能模块
|
||||
- `services/admin/member/*`
|
||||
- `services/admin/order/*`
|
||||
- `services/admin/pay/*`
|
||||
|
||||
4. **P3 扩展模块**:插件、扩展功能
|
||||
- `services/admin/addon/*`
|
||||
|
||||
### 对齐检查清单(每个Service方法)
|
||||
|
||||
- [ ] **方法签名对齐**:与Java方法签名完全一致
|
||||
- [ ] **参数处理对齐**:参数类型、参数名与Java一致
|
||||
- [ ] **返回值对齐**:返回值类型与Java一致
|
||||
- [ ] **异常处理对齐**:异常类型、异常消息与Java一致
|
||||
- [ ] **数据库操作对齐**:查询逻辑与Java一致
|
||||
- [ ] **事务处理对齐**:事务范围与Java一致
|
||||
- [ ] **使用框架能力**:使用AuthService、CacheService等,不重复造轮子
|
||||
|
||||
### 迁移工具使用
|
||||
|
||||
```bash
|
||||
# 运行迁移工具
|
||||
cd tools/java-to-nestjs-migration
|
||||
node migration-coordinator.js
|
||||
|
||||
# 输出:
|
||||
# - 扫描Java项目(1215个文件)
|
||||
# - 生成NestJS代码骨架
|
||||
# - 生成映射报告
|
||||
```
|
||||
|
||||
### 质量控制检查点
|
||||
|
||||
1. **编译通过**:`npm run build` - 无TypeScript编译错误
|
||||
2. **服务启动**:`docker-compose up -d` - 所有模块正确加载
|
||||
3. **API测试**:测试接口与Java版本一致
|
||||
4. **数据库验证**:CRUD操作与Java一致
|
||||
|
||||
---
|
||||
|
||||
**参考文档**:
|
||||
- 完整迁移方案:`./java-migration.mdc`
|
||||
- 迁移工具目录:`tools/java-to-nestjs-migration/`
|
||||
|
||||
@@ -1,228 +0,0 @@
|
||||
---
|
||||
description:
|
||||
globs:
|
||||
alwaysApply: true
|
||||
---
|
||||
# 前后端多智能体协调机制
|
||||
RULE 1: 每个NestJS文件必须有对应的PHP文件
|
||||
RULE 2: 每个服务必须严格按admin/api/core分层
|
||||
RULE 3: 每个模块职责必须与PHP项目完全一致
|
||||
RULE 4: 每行代码必须基于PHP项目真实实现
|
||||
RULE 5: 每个方法必须与PHP项目方法一一对应
|
||||
## 协调原则
|
||||
|
||||
### 1. 同步开发原则
|
||||
- **并行开发**: 前后端智能体并行工作,通过契约接口协调
|
||||
- **契约优先**: 优先定义 API 契约,确保前后端接口一致
|
||||
- **质量对等**: 前后端质量要求保持一致,测试覆盖率对等
|
||||
|
||||
### 2. 规范对齐原则
|
||||
- **命名对齐**: 前后端命名规范保持一致,优先使用业务术语
|
||||
- **结构对齐**: 前后端数据结构保持一致,DTO 与前端类型对应
|
||||
- **错误对齐**: 前后端错误处理机制保持一致,错误码统一
|
||||
|
||||
### 3. 工具协调原则
|
||||
- **版本控制**: 使用 Git 进行版本控制,前后端代码分离管理
|
||||
- **CI/CD 协调**: 前后端构建流程协调,确保部署一致性
|
||||
- **文档同步**: API 文档与前端类型定义同步更新
|
||||
|
||||
## 智能体映射关系
|
||||
|
||||
| 前端智能体 | 后端智能体 | 协调阶段 | 主要职责 |
|
||||
|-----------|-----------|----------|----------|
|
||||
| F1 FrontendAnalyzer | S1 Analyzer | 需求分析 | 页面设计与接口设计协调 |
|
||||
| F2 FrontendArchitect | S2 Architect | 架构设计 | 整体架构与目录结构协调 |
|
||||
| F3 FrontendInfraOperator | S3 InfraOperator | 基建接入 | 开发环境与工具链协调 |
|
||||
| F4 FrontendDeveloper | S4 Developer | 功能开发 | 接口实现与页面开发协调 |
|
||||
| F5 FrontendSecurityGuard | S5 SecurityGuard | 安全检查 | 前后端安全策略协调 |
|
||||
| F6 FrontendQualityGate | S6 QualityGate | 质量门禁 | 代码质量与测试协调 |
|
||||
| F7 FrontendAuditor | S7 Auditor | 规范审计 | 代码规范与标准协调 |
|
||||
| F8 FrontendRelease | S8 Release | 发布部署 | 构建部署与版本协调 |
|
||||
| F9 FrontendPerfTuner | S9 PerfTuner | 性能优化 | 性能指标与优化协调 |
|
||||
|
||||
## 协调检查点
|
||||
|
||||
### 1. 项目启动阶段
|
||||
**参与智能体**: F1 + S1
|
||||
**协调内容**:
|
||||
- 业务需求分析与技术方案设计
|
||||
- 页面功能划分与 API 接口设计
|
||||
- 开发计划制定与里程碑设定
|
||||
|
||||
**输出产物**:
|
||||
- 需求分析文档
|
||||
- API 接口设计文档
|
||||
- 开发计划与时间安排
|
||||
|
||||
### 2. 架构设计阶段
|
||||
**参与智能体**: F2 + S2
|
||||
**协调内容**:
|
||||
- 整体架构设计与技术选型
|
||||
- 目录结构设计与模块划分
|
||||
- 数据流设计与状态管理方案
|
||||
|
||||
**输出产物**:
|
||||
- 架构设计文档
|
||||
- 目录结构规范
|
||||
- 数据流设计文档
|
||||
|
||||
### 3. 基建接入阶段
|
||||
**参与智能体**: F3 + S3
|
||||
**协调内容**:
|
||||
- 开发环境配置与工具链搭建
|
||||
- 依赖管理策略与版本控制
|
||||
- 构建流程设计与自动化配置
|
||||
|
||||
**输出产物**:
|
||||
- 开发环境配置文档
|
||||
- 工具链使用指南
|
||||
- 构建流程文档
|
||||
|
||||
### 4. 功能开发阶段
|
||||
**参与智能体**: F4 + S4
|
||||
**协调内容**:
|
||||
- API 接口实现与前端页面开发
|
||||
- 数据交互逻辑与状态管理
|
||||
- 业务逻辑实现与用户体验
|
||||
|
||||
**输出产物**:
|
||||
- 功能模块代码
|
||||
- API 接口文档
|
||||
- 测试用例与测试报告
|
||||
|
||||
### 5. 质量保证阶段
|
||||
**参与智能体**: F5 + S5, F6 + S6
|
||||
**协调内容**:
|
||||
- 安全策略实施与漏洞修复
|
||||
- 代码质量检查与测试覆盖
|
||||
- 性能指标监控与优化
|
||||
|
||||
**输出产物**:
|
||||
- 安全评估报告
|
||||
- 质量检查报告
|
||||
- 性能测试报告
|
||||
|
||||
### 6. 规范审计阶段
|
||||
**参与智能体**: F7 + S7
|
||||
**协调内容**:
|
||||
- 代码规范检查与标准对齐
|
||||
- 最佳实践实施与文档完善
|
||||
- 技术债务识别与重构计划
|
||||
|
||||
**输出产物**:
|
||||
- 规范检查报告
|
||||
- 最佳实践文档
|
||||
- 重构计划与建议
|
||||
|
||||
### 7. 发布部署阶段
|
||||
**参与智能体**: F8 + S8
|
||||
**协调内容**:
|
||||
- 构建流程协调与版本管理
|
||||
- 部署策略制定与环境配置
|
||||
- 发布计划执行与回滚预案
|
||||
|
||||
**输出产物**:
|
||||
- 构建产物与部署包
|
||||
- 部署配置文档
|
||||
- 发布计划与回滚预案
|
||||
|
||||
## 协调工具
|
||||
|
||||
### 1. API 契约管理
|
||||
- **OpenAPI/Swagger**: API 接口文档与类型定义
|
||||
- **TypeScript 类型生成**: 前端类型定义自动生成
|
||||
- **API 测试工具**: 接口测试与验证
|
||||
|
||||
### 2. 版本控制
|
||||
- **Git**: 代码版本控制与分支管理
|
||||
- **GitHub/GitLab**: 代码托管与协作平台
|
||||
- **Git Flow**: 分支策略与发布流程
|
||||
|
||||
### 3. CI/CD 协调
|
||||
- **GitHub Actions/GitLab CI**: 自动化构建与测试
|
||||
- **Docker**: 容器化部署与环境一致性
|
||||
- **Kubernetes**: 容器编排与服务管理
|
||||
|
||||
### 4. 项目管理
|
||||
- **Jira/ZenTao**: 需求管理与任务跟踪
|
||||
- **Confluence/Notion**: 文档管理与知识共享
|
||||
- **Slack/钉钉**: 即时沟通与通知
|
||||
|
||||
### 5. 监控与反馈
|
||||
- **Sentry**: 错误监控与性能追踪
|
||||
- **Prometheus**: 指标监控与告警
|
||||
- **Grafana**: 数据可视化与报表
|
||||
|
||||
## 协调流程
|
||||
|
||||
### 1. 日常开发协调
|
||||
```
|
||||
每日站会 → 任务分配 → 并行开发 → 代码审查 → 集成测试 → 部署验证
|
||||
```
|
||||
|
||||
### 2. 版本发布协调
|
||||
```
|
||||
需求冻结 → 功能开发 → 集成测试 → 预发布验证 → 正式发布 → 监控反馈
|
||||
```
|
||||
|
||||
### 3. 问题处理协调
|
||||
```
|
||||
问题发现 → 影响评估 → 方案制定 → 并行修复 → 验证测试 → 部署上线
|
||||
```
|
||||
|
||||
## 协调规范
|
||||
|
||||
### 1. 沟通规范
|
||||
- **定期同步**: 每日站会、周例会、里程碑评审
|
||||
- **异步沟通**: 使用文档、评论、邮件进行异步沟通
|
||||
- **紧急沟通**: 使用即时通讯工具进行紧急问题处理
|
||||
|
||||
### 2. 文档规范
|
||||
- **API 文档**: 使用 OpenAPI 规范,及时更新
|
||||
- **技术文档**: 使用 Markdown 格式,结构清晰
|
||||
- **变更日志**: 记录所有重要变更,便于追溯
|
||||
|
||||
### 3. 代码规范
|
||||
- **命名规范**: 前后端命名保持一致,使用业务术语
|
||||
- **注释规范**: 关键逻辑必须有注释,便于理解
|
||||
- **提交规范**: 使用规范的提交信息,便于版本管理
|
||||
|
||||
### 4. 测试规范
|
||||
- **单元测试**: 前后端都要有充分的单元测试
|
||||
- **集成测试**: 前后端集成测试,确保接口正确
|
||||
- **端到端测试**: 完整的用户流程测试
|
||||
|
||||
## 效果评估
|
||||
|
||||
### 1. 开发效率指标
|
||||
- **开发周期**: 从需求到上线的完整周期
|
||||
- **代码质量**: 缺陷密度、技术债务比例
|
||||
- **团队协作**: 沟通效率、冲突解决时间
|
||||
|
||||
### 2. 产品质量指标
|
||||
- **功能完整性**: 需求实现程度、功能覆盖率
|
||||
- **性能指标**: 响应时间、吞吐量、资源使用
|
||||
- **用户体验**: 用户满意度、易用性评分
|
||||
|
||||
### 3. 运维指标
|
||||
- **部署频率**: 发布频率、部署成功率
|
||||
- **系统稳定性**: 可用性、故障恢复时间
|
||||
- **监控覆盖**: 监控覆盖率、告警准确性
|
||||
|
||||
## 持续改进
|
||||
|
||||
### 1. 定期回顾
|
||||
- **周回顾**: 每周进行开发回顾,识别改进点
|
||||
- **月回顾**: 每月进行项目回顾,评估整体效果
|
||||
- **季度回顾**: 每季度进行战略回顾,调整方向
|
||||
|
||||
### 2. 改进措施
|
||||
- **流程优化**: 根据回顾结果优化协调流程
|
||||
- **工具升级**: 引入新的工具提升协作效率
|
||||
- **技能提升**: 团队技能培训与知识分享
|
||||
|
||||
### 3. 最佳实践
|
||||
- **经验总结**: 总结成功经验,形成最佳实践
|
||||
- **案例分享**: 分享典型案例,促进团队学习
|
||||
|
||||
- **标准制定**: 制定团队标准,确保一致性
|
||||
857
.cursor/rules/java-migration.mdc
Normal file
857
.cursor/rules/java-migration.mdc
Normal file
@@ -0,0 +1,857 @@
|
||||
---
|
||||
description: Java后端迁移到v1框架的系统性迁移方案和规则
|
||||
globs:
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
# Java后端迁移到v1框架 - 系统性迁移方案
|
||||
|
||||
## 📋 迁移目标
|
||||
|
||||
**核心目标**:将Java后端完全替换为NestJS v1框架,保持数据库和前端100%不变
|
||||
|
||||
**约束条件**:
|
||||
- ✅ 数据库:完全复用Java的数据库结构(表结构、字段、索引、数据)
|
||||
- ✅ 前端:完全复用Java的前端代码(API接口、响应格式、权限逻辑)
|
||||
- ✅ 业务逻辑:100%对齐Java的业务逻辑(方法签名、参数、返回值、异常处理)
|
||||
|
||||
## 🏗️ 架构对齐方案
|
||||
|
||||
### 1. 分层架构映射
|
||||
|
||||
```
|
||||
Java (Spring Boot) → NestJS v1 Framework
|
||||
═══════════════════════════════════════════════════════════════
|
||||
Controller层 → Controller层 (controllers/)
|
||||
├─ @RestController → @Controller
|
||||
├─ @RequestMapping → @Get/@Post/@Put/@Delete
|
||||
└─ @RequestParam/@RequestBody → @Query/@Body/@Param
|
||||
|
||||
Service层 → Service层 (services/)
|
||||
├─ @Service → @Injectable
|
||||
├─ Interface (IService) → Interface (Service)
|
||||
└─ Impl (ServiceImpl) → Impl (ServiceImpl)
|
||||
|
||||
Repository层 → Entity层 (entities/)
|
||||
├─ JpaRepository<T, ID> → @InjectRepository(Entity)
|
||||
└─ Entity → @Entity + TypeORM
|
||||
|
||||
DTO/VO/Param → DTO层 (dtos/)
|
||||
├─ VO (View Object) → VO (vo/*.dto.ts) - 保持Vo原样
|
||||
├─ DTO (Data Transfer Object) → DTO (dto/*.dto.ts) - 保持Dto原样
|
||||
└─ Param → Param (param/*.dto.ts) - 保持Param原样
|
||||
|
||||
配置层 → 配置层 (config/)
|
||||
├─ @Configuration → @Module
|
||||
├─ @Bean → providers/exports
|
||||
└─ application.yml → ConfigModule + 环境变量
|
||||
|
||||
框架能力层(v1框架提供) → 框架能力层 (@wwjBoot)
|
||||
├─ 基础设施服务
|
||||
│ ├─ RequestContextService → 请求上下文服务
|
||||
│ ├─ HttpClientService → HTTP客户端服务
|
||||
│ ├─ MetricsService → 指标服务
|
||||
│ └─ ConfigService/AppConfigService → 配置服务
|
||||
├─ 认证授权
|
||||
│ ├─ AuthService → JWT认证服务
|
||||
│ ├─ AuthGuard → 认证守卫
|
||||
│ ├─ RbacGuard → 权限守卫
|
||||
│ └─ @Public()/@Admin()/@Api() → 路由装饰器
|
||||
├─ 缓存服务
|
||||
│ ├─ CacheService → 缓存服务
|
||||
│ ├─ LockService → 分布式锁服务
|
||||
│ └─ CacheManagerService → 缓存管理服务
|
||||
├─ 队列与事件
|
||||
│ ├─ QueueService → 队列服务
|
||||
│ ├─ EventBus → 事件总线
|
||||
│ ├─ EventListenerService → 事件监听服务
|
||||
│ └─ JobSchedulerService → 任务调度服务
|
||||
├─ 工具类(vendor/utils)
|
||||
│ ├─ StringUtils → 字符串工具
|
||||
│ ├─ JsonUtils → JSON工具(含命名转换)
|
||||
│ ├─ FileUtils → 文件工具
|
||||
│ ├─ DateUtils → 日期工具
|
||||
│ ├─ CryptoUtils → 加密工具(bcrypt)
|
||||
│ ├─ ImageUtils → 图片工具(Base64转换)
|
||||
│ ├─ WwjcloudUtils → Wwjcloud API工具
|
||||
│ └─ ZipUtils → ZIP压缩工具
|
||||
├─ 线程本地存储(infra/context)
|
||||
│ └─ ThreadLocalHolder → 线程本地变量工具类(对齐Java component/base/ThreadLocalHolder)
|
||||
├─ 供应商服务(vendor)
|
||||
│ ├─ PayService → 支付服务
|
||||
│ ├─ SmsService → 短信服务
|
||||
│ ├─ NoticeService → 通知服务
|
||||
│ └─ UploadService → 上传服务
|
||||
├─ 响应包装
|
||||
│ └─ Result<T> → 统一响应格式
|
||||
├─ 中间件
|
||||
│ ├─ RequestIdMiddleware → 请求ID中间件
|
||||
│ ├─ RequestContextMiddleware → 请求上下文中间件
|
||||
│ ├─ TenantMiddleware → 租户中间件
|
||||
│ └─ IpFilterMiddleware → IP过滤中间件
|
||||
├─ 拦截器
|
||||
│ ├─ LoggingInterceptor → 日志拦截器
|
||||
│ ├─ MetricsInterceptor → 指标拦截器
|
||||
│ └─ ResponseInterceptor → 响应拦截器
|
||||
├─ 过滤器
|
||||
│ └─ HttpExceptionFilter → 异常过滤器
|
||||
├─ 守卫
|
||||
│ └─ RateLimitGuard → 限流守卫
|
||||
└─ 动态模块加载
|
||||
├─ EntityModule.register() → 动态加载实体
|
||||
├─ ServiceModule.register() → 动态加载服务
|
||||
└─ ControllerModule.register() → 动态加载控制器
|
||||
```
|
||||
|
||||
### 2. 模块组织映射
|
||||
|
||||
```
|
||||
Java模块结构 → NestJS模块结构
|
||||
═══════════════════════════════════════════════════════════════
|
||||
com.niu.core.controller.* → controllers/adminapi/*
|
||||
com.niu.core.service.* → services/admin/*
|
||||
com.niu.core.service.impl.* → services/admin/impl/*
|
||||
com.niu.core.entity.* → entities/*
|
||||
com.niu.core.dto.* → dtos/admin/*
|
||||
com.niu.core.job.* → jobs/*
|
||||
com.niu.core.listener.* → listeners/*
|
||||
com.niu.core.common.component.base.ThreadLocalHolder → boot/infra/context/thread-local-holder.ts
|
||||
```
|
||||
|
||||
### 3. 动态模块加载机制
|
||||
|
||||
v1框架采用**动态模块加载**,自动扫描并注册所有组件:
|
||||
|
||||
```typescript
|
||||
// EntityModule - 动态加载所有实体
|
||||
EntityModule.register()
|
||||
→ 扫描 entities/*.entity.ts
|
||||
→ 注册到 TypeOrmModule.forFeature(entities)
|
||||
|
||||
// ServiceModule - 动态加载所有服务
|
||||
ServiceModule.register()
|
||||
→ 扫描 services/**/*.service.ts
|
||||
→ 自动注册为 providers
|
||||
|
||||
// ControllerModule - 动态加载所有控制器
|
||||
ControllerModule.register()
|
||||
→ 扫描 controllers/**/*.controller.ts
|
||||
→ 自动注册为 controllers
|
||||
```
|
||||
|
||||
## 🔄 迁移流程(5个阶段)
|
||||
|
||||
### 阶段1:扫描与分析(Scanning)
|
||||
|
||||
**目标**:全面扫描Java项目,建立完整的元数据索引
|
||||
|
||||
**执行步骤**:
|
||||
1. **扫描Java项目结构**
|
||||
```bash
|
||||
tools/java-to-nestjs-migration/migration-coordinator.js
|
||||
```
|
||||
- 扫描所有Controller、Service、Entity、DTO文件
|
||||
- 提取方法签名、参数类型、返回值类型
|
||||
- 分析依赖关系(Service依赖、Repository依赖)
|
||||
|
||||
2. **构建中央数据仓库(CDR)**
|
||||
- Service方法签名索引(1038个方法)
|
||||
- DTO类型映射(732个类型)
|
||||
- 实体映射关系(89个实体)
|
||||
- 依赖关系图
|
||||
|
||||
3. **生成映射报告**
|
||||
- Java文件 → NestJS文件映射表
|
||||
- 方法签名对比表
|
||||
- 依赖关系分析报告
|
||||
|
||||
**输出产物**:
|
||||
- `migration-report.json` - 迁移报告
|
||||
- CDR索引数据
|
||||
- 文件映射关系表
|
||||
|
||||
### 阶段2:代码生成(Generation)
|
||||
|
||||
**目标**:使用迁移工具自动生成NestJS代码骨架
|
||||
|
||||
**执行步骤**:
|
||||
1. **生成实体(Entity)**
|
||||
- 从Java Entity生成TypeORM Entity
|
||||
- 保持表名、字段名、索引完全一致
|
||||
- 生成文件:`entities/*.entity.ts`
|
||||
|
||||
2. **生成DTO**
|
||||
- 从Java DTO/VO/Param生成NestJS DTO
|
||||
- 保持字段名、类型、验证规则一致
|
||||
- 生成文件:`dtos/admin/*/*.dto.ts`
|
||||
|
||||
3. **生成服务接口和实现**
|
||||
- 从Java Interface生成NestJS Service接口
|
||||
- 从Java ServiceImpl生成NestJS Service实现骨架
|
||||
- 生成文件:`services/admin/*/*.service.ts`
|
||||
|
||||
4. **生成控制器**
|
||||
- 从Java Controller生成NestJS Controller
|
||||
- 保持路由路径、HTTP方法、参数一致
|
||||
- 生成文件:`controllers/adminapi/*/*.controller.ts`
|
||||
|
||||
5. **生成模块文件**
|
||||
- 动态模块:`EntityModule.register()`
|
||||
- 动态模块:`ServiceModule.register()`
|
||||
- 动态模块:`ControllerModule.register()`
|
||||
|
||||
**输出产物**:
|
||||
- 所有Entity文件(89个)
|
||||
- 所有DTO文件(732个)
|
||||
- 所有Service文件(158个)
|
||||
- 所有Controller文件(110个)
|
||||
- 模块注册文件
|
||||
|
||||
### 阶段3:业务逻辑对齐(Alignment)
|
||||
|
||||
**目标**:逐个模块对齐Java的业务逻辑
|
||||
|
||||
**执行策略**:**按模块优先级逐步对齐**
|
||||
|
||||
#### 优先级排序:
|
||||
1. **核心模块(P0)**:认证、权限、用户管理
|
||||
- `services/admin/auth/*`
|
||||
- `services/admin/user/*`
|
||||
- `services/admin/rbac/*`
|
||||
|
||||
2. **基础模块(P1)**:配置、菜单、字典
|
||||
- `services/admin/sys/*`
|
||||
- `services/core/config/*`
|
||||
|
||||
3. **业务模块(P2)**:业务功能模块
|
||||
- `services/admin/member/*`
|
||||
- `services/admin/order/*`
|
||||
- `services/admin/pay/*`
|
||||
|
||||
4. **扩展模块(P3)**:插件、扩展功能
|
||||
- `services/admin/addon/*`
|
||||
|
||||
#### 对齐检查清单(每个Service方法):
|
||||
|
||||
- [ ] **方法签名对齐**
|
||||
```typescript
|
||||
// Java
|
||||
public PageResult<MemberVo> getPage(MemberSearchParam param)
|
||||
|
||||
// NestJS - 必须完全一致(保持Vo/Param原样,不添加Dto后缀)
|
||||
async getPage(param: MemberSearchParam): Promise<PageResult<MemberVo>>
|
||||
```
|
||||
|
||||
- [ ] **参数处理对齐**
|
||||
```typescript
|
||||
// Java: @RequestParam("pageNo") Integer pageNo
|
||||
// NestJS: @Query('pageNo') pageNo: number
|
||||
```
|
||||
|
||||
- [ ] **返回值对齐**
|
||||
```typescript
|
||||
// Java: return Result.success(data)
|
||||
// NestJS: return Result.success(data)
|
||||
```
|
||||
|
||||
- [ ] **异常处理对齐**
|
||||
```typescript
|
||||
// Java: throw new BusinessException("错误信息")
|
||||
// NestJS: throw new BadRequestException("错误信息")
|
||||
```
|
||||
|
||||
- [ ] **数据库操作对齐**
|
||||
```typescript
|
||||
// Java: repository.findByXxx()
|
||||
// NestJS: repository.find({ where: { xxx } })
|
||||
```
|
||||
|
||||
- [ ] **事务处理对齐**
|
||||
```typescript
|
||||
// Java: @Transactional
|
||||
// NestJS: @Transaction() 或使用EntityManager
|
||||
```
|
||||
|
||||
### 阶段4:框架能力集成(Integration)
|
||||
|
||||
**目标**:将业务代码集成到v1框架能力体系中
|
||||
|
||||
#### 4.1 认证授权集成
|
||||
|
||||
```typescript
|
||||
// 使用框架的AuthService
|
||||
import { AuthService } from '@wwjBoot';
|
||||
|
||||
// 生成Token
|
||||
const token = this.authService.signToken({ uid, username });
|
||||
|
||||
// 验证Token
|
||||
const claims = this.authService.verifyToken(token);
|
||||
```
|
||||
|
||||
#### 4.2 缓存集成
|
||||
|
||||
```typescript
|
||||
// 使用框架的CacheService
|
||||
import { CacheService } from '@wwjBoot';
|
||||
|
||||
// 缓存操作
|
||||
await this.cacheService.set(key, value, ttl);
|
||||
const value = await this.cacheService.get(key);
|
||||
```
|
||||
|
||||
#### 4.3 配置管理集成
|
||||
|
||||
```typescript
|
||||
// 使用框架的AppConfigService
|
||||
import { AppConfigService } from '@wwjBoot';
|
||||
|
||||
// 读取配置
|
||||
const config = this.appConfig.webRoot;
|
||||
```
|
||||
|
||||
#### 4.4 工具类集成
|
||||
|
||||
```typescript
|
||||
// 使用框架的工具类
|
||||
import { JsonUtils, FileUtils, StringUtils } from '@wwjBoot';
|
||||
|
||||
// JSON操作
|
||||
const obj = JsonUtils.parseObject<Type>(jsonStr);
|
||||
const jsonStr = JsonUtils.toCamelCaseJSONString(obj);
|
||||
|
||||
// 文件操作
|
||||
const content = FileUtils.readFile(filePath);
|
||||
FileUtils.writeFile(filePath, content);
|
||||
```
|
||||
|
||||
#### 4.5 线程本地存储集成
|
||||
|
||||
```typescript
|
||||
// 使用框架的ThreadLocalHolder(对齐Java component/base/ThreadLocalHolder)
|
||||
import { ThreadLocalHolder } from '@wwjBoot';
|
||||
|
||||
// 存储任意key-value
|
||||
ThreadLocalHolder.put('current-user', userInfo);
|
||||
ThreadLocalHolder.put('current-site-id', siteId);
|
||||
|
||||
// 获取值
|
||||
const userInfo = ThreadLocalHolder.get('current-user');
|
||||
const userInfoTyped = ThreadLocalHolder.getTyped<UserInfo>('current-user');
|
||||
|
||||
// 便捷方法
|
||||
ThreadLocalHolder.putString('key', 'value');
|
||||
const value = ThreadLocalHolder.getString('key');
|
||||
ThreadLocalHolder.putInteger('count', 10);
|
||||
const count = ThreadLocalHolder.getInteger('count');
|
||||
|
||||
// 注意:RequestContextService.runWith()会自动初始化ThreadLocalHolder上下文
|
||||
// 在请求处理过程中,ThreadLocalHolder可以直接使用
|
||||
```
|
||||
|
||||
### 阶段5:测试与验证(Validation)
|
||||
|
||||
**目标**:确保迁移后的功能与Java版本100%一致
|
||||
|
||||
#### 5.1 单元测试
|
||||
|
||||
```typescript
|
||||
// 测试Service方法
|
||||
describe('LoginServiceImpl', () => {
|
||||
it('should login successfully', async () => {
|
||||
const result = await service.login({ username: 'admin', password: '123456' });
|
||||
expect(result.token).toBeDefined();
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
#### 5.2 集成测试
|
||||
|
||||
```bash
|
||||
# 使用Docker进行完整环境测试
|
||||
docker-compose up -d
|
||||
# 测试登录接口
|
||||
curl -X GET "http://localhost:3000/adminapi/login/admin?username=admin&password=123456"
|
||||
```
|
||||
|
||||
#### 5.3 API兼容性测试
|
||||
|
||||
**检查点**:
|
||||
- [ ] 所有API路径与Java一致
|
||||
- [ ] 请求参数格式与Java一致
|
||||
- [ ] 响应格式与Java一致(Result包装)
|
||||
- [ ] 错误码与Java一致
|
||||
- [ ] 异常消息与Java一致
|
||||
|
||||
#### 5.4 数据库兼容性测试
|
||||
|
||||
**检查点**:
|
||||
- [ ] 表结构完全一致
|
||||
- [ ] 字段类型完全一致
|
||||
- [ ] 索引结构完全一致
|
||||
- [ ] 数据读写完全一致
|
||||
|
||||
## 🎯 关键迁移原则
|
||||
|
||||
### 原则1:优先对齐Java逻辑,再优化框架特性
|
||||
|
||||
**错误做法**:
|
||||
```typescript
|
||||
// ❌ 直接使用NestJS特性,忽略Java逻辑
|
||||
@Get(':id')
|
||||
async getById(@Param('id') id: string) {
|
||||
return await this.service.findOne(id);
|
||||
}
|
||||
```
|
||||
|
||||
**正确做法**:
|
||||
```typescript
|
||||
// ✅ 先对齐Java逻辑,再考虑优化
|
||||
@Get(':id')
|
||||
async getById(@Param('id') id: string) {
|
||||
// Java: MemberController.getById(Integer id)
|
||||
// 必须保持参数类型、返回值类型一致
|
||||
const member = await this.service.getById(Number(id));
|
||||
return Result.success(member);
|
||||
}
|
||||
```
|
||||
|
||||
### 原则2:数据库100%对齐,禁止修改
|
||||
|
||||
**绝对禁止**:
|
||||
- ❌ 修改表名
|
||||
- ❌ 修改字段名
|
||||
- ❌ 修改字段类型
|
||||
- ❌ 添加或删除字段
|
||||
- ❌ 修改索引结构
|
||||
|
||||
**正确做法**:
|
||||
```typescript
|
||||
// ✅ 完全对齐Java的Entity定义
|
||||
@Entity('nc_sys_user') // 表名必须与Java一致
|
||||
export class SysUser {
|
||||
@Column({ name: 'user_name' }) // 字段名必须与Java一致
|
||||
userName: string;
|
||||
}
|
||||
```
|
||||
|
||||
### 原则3:API接口100%对齐,确保前端兼容
|
||||
|
||||
**检查清单**:
|
||||
- [ ] 路由路径一致:`/adminapi/member/list`
|
||||
- [ ] HTTP方法一致:`GET`、`POST`、`PUT`、`DELETE`
|
||||
- [ ] 参数名一致:`pageNo`、`pageSize`、`keyword`
|
||||
- [ ] 响应格式一致:`Result<T>` 包装
|
||||
- [ ] 错误码一致:`error_code`、`msg_key`
|
||||
|
||||
### 原则4:业务逻辑100%对齐,禁止自创逻辑
|
||||
|
||||
**错误做法**:
|
||||
```typescript
|
||||
// ❌ 自创业务逻辑
|
||||
async login(param: LoginParam) {
|
||||
// Java中没有这个逻辑,不要添加
|
||||
if (param.username.length < 3) {
|
||||
throw new BadRequestException('用户名太短');
|
||||
}
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
**正确做法**:
|
||||
```typescript
|
||||
// ✅ 严格对齐Java逻辑(保持Param原样)
|
||||
async login(param: LoginParam) {
|
||||
// 完全按照Java的LoginServiceImpl.login()实现
|
||||
const user = await this.repository.findOne({ where: { username: param.username } });
|
||||
if (!user || !await CryptoUtils.match(param.password, user.password)) {
|
||||
// ✅ 使用NestJS的HttpException系列(不要使用BaseException)
|
||||
throw new UnauthorizedException({ msg_key: 'error.auth.invalid_credentials' });
|
||||
}
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
### 原则5:异常处理使用NestJS原生特性
|
||||
|
||||
**错误做法**:
|
||||
```typescript
|
||||
// ❌ 使用机械迁移的BaseException
|
||||
import { BaseException } from '../../common/exception';
|
||||
throw new BaseException('操作失败');
|
||||
```
|
||||
|
||||
**正确做法**:
|
||||
```typescript
|
||||
// ✅ 使用NestJS的HttpException系列
|
||||
import { BadRequestException, UnauthorizedException, ForbiddenException } from '@nestjs/common';
|
||||
throw new BadRequestException({ msg_key: 'error.common.operation_failed' });
|
||||
throw new UnauthorizedException({ msg_key: 'error.auth.invalid_token' });
|
||||
throw new ForbiddenException({ msg_key: 'error.auth.insufficient_permission' });
|
||||
```
|
||||
|
||||
**配置访问使用依赖注入**:
|
||||
```typescript
|
||||
// ❌ 静态配置类(已删除)
|
||||
import { GlobalConfig } from '../../common/config';
|
||||
const prefix = GlobalConfig.tablePrefix;
|
||||
|
||||
// ✅ 使用AppConfigService(依赖注入)
|
||||
constructor(private readonly appConfig: AppConfigService) {}
|
||||
const prefix = this.appConfig.tablePrefix;
|
||||
```
|
||||
|
||||
## 🔧 迁移工具使用指南
|
||||
|
||||
### 1. 运行迁移工具
|
||||
|
||||
```bash
|
||||
cd tools/java-to-nestjs-migration
|
||||
node migration-coordinator.js
|
||||
```
|
||||
|
||||
**输出**:
|
||||
- 扫描Java项目(1215个文件)
|
||||
- 生成NestJS代码骨架
|
||||
- 生成映射报告
|
||||
|
||||
### 2. 迁移工具生成的内容
|
||||
|
||||
```
|
||||
wwjcloud/libs/wwjcloud-core/src/
|
||||
├── entities/ # 89个实体文件(自动生成)
|
||||
├── dtos/ # 732个DTO文件(自动生成)
|
||||
├── services/ # 158个服务文件(自动生成)
|
||||
├── controllers/ # 110个控制器文件(自动生成)
|
||||
├── entity.module.ts # 动态实体模块(自动生成)
|
||||
├── service.module.ts # 动态服务模块(自动生成)
|
||||
└── controller.module.ts # 动态控制器模块(自动生成)
|
||||
```
|
||||
|
||||
### 3. 迁移工具的限制
|
||||
|
||||
**不会自动生成的内容**:
|
||||
- ❌ Service方法的业务逻辑实现(只生成方法签名)
|
||||
- ❌ Controller的参数解析逻辑(需要手动对齐)
|
||||
- ❌ 复杂的查询逻辑(需要手动实现)
|
||||
- ❌ 事务处理逻辑(需要手动添加)
|
||||
|
||||
**需要手动对齐的内容**:
|
||||
- ✅ Service方法的业务逻辑
|
||||
- ✅ Controller的参数处理
|
||||
- ✅ 异常处理逻辑
|
||||
- ✅ 数据库查询优化
|
||||
|
||||
## 📊 质量控制检查点
|
||||
|
||||
### 检查点1:编译通过
|
||||
|
||||
```bash
|
||||
cd wwjcloud
|
||||
npm run build
|
||||
```
|
||||
|
||||
**要求**:
|
||||
- ✅ 无TypeScript编译错误
|
||||
- ✅ 无依赖注入错误
|
||||
- ✅ 无类型错误
|
||||
|
||||
### 检查点2:服务启动
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
docker logs wwjcloud-api-v1
|
||||
```
|
||||
|
||||
**要求**:
|
||||
- ✅ 服务成功启动
|
||||
- ✅ 所有模块正确加载
|
||||
- ✅ 数据库连接成功
|
||||
- ✅ Redis连接成功
|
||||
|
||||
### 检查点3:API测试
|
||||
|
||||
```bash
|
||||
# 测试登录接口
|
||||
curl -X GET "http://localhost:3000/adminapi/login/admin?username=admin&password=123456"
|
||||
```
|
||||
|
||||
**要求**:
|
||||
- ✅ 接口返回200状态码
|
||||
- ✅ 响应格式正确(Result包装)
|
||||
- ✅ Token生成正确
|
||||
- ✅ 错误处理正确
|
||||
|
||||
### 检查点4:数据库操作验证
|
||||
|
||||
```typescript
|
||||
// 验证CRUD操作
|
||||
await service.create(data); // 创建
|
||||
await service.getById(id); // 查询
|
||||
await service.update(id, data); // 更新
|
||||
await service.delete(id); // 删除
|
||||
```
|
||||
|
||||
**要求**:
|
||||
- ✅ 数据正确写入数据库
|
||||
- ✅ 数据正确从数据库读取
|
||||
- ✅ 字段映射正确
|
||||
- ✅ 类型转换正确
|
||||
|
||||
## 🚨 常见问题与解决方案
|
||||
|
||||
### 问题1:Repository无法注入
|
||||
|
||||
**症状**:
|
||||
```
|
||||
UnknownDependenciesException: Nest can't resolve dependencies of the XxxServiceImpl (?, ?).
|
||||
Please make sure that the argument "XxxRepository" at index [1] is available.
|
||||
```
|
||||
|
||||
**原因**:
|
||||
- EntityModule没有正确注册
|
||||
- Entity没有正确导出
|
||||
- ServiceModule没有导入EntityModule
|
||||
|
||||
**解决方案**:
|
||||
```typescript
|
||||
// 1. 确保EntityModule正确注册
|
||||
EntityModule.register()
|
||||
|
||||
// 2. 确保Entity正确导出
|
||||
@Entity('nc_sys_user')
|
||||
export class SysUser { ... }
|
||||
|
||||
// 3. 确保ServiceModule导入EntityModule
|
||||
ServiceModule.register()
|
||||
→ imports: [EntityModule.register()]
|
||||
```
|
||||
|
||||
### 问题2:DTO类型不匹配
|
||||
|
||||
**症状**:
|
||||
```
|
||||
TS2345: Argument of type 'Record<string, any>' is not assignable to parameter of type 'XxxDto'.
|
||||
```
|
||||
|
||||
**原因**:
|
||||
- Controller参数类型错误
|
||||
- DTO定义不完整
|
||||
|
||||
**解决方案**:
|
||||
```typescript
|
||||
// ✅ 正确使用DTO(保持Param原样,不添加Dto后缀)
|
||||
@Get(':id')
|
||||
async getById(@Param('id') id: string, @Query() query: XxxSearchParam) {
|
||||
// query已经是XxxSearchParam类型,不需要转换
|
||||
return await this.service.getPage(query);
|
||||
}
|
||||
```
|
||||
|
||||
### 问题3:业务逻辑不一致
|
||||
|
||||
**症状**:
|
||||
- 功能行为与Java版本不一致
|
||||
- 数据计算结果不同
|
||||
|
||||
**原因**:
|
||||
- 业务逻辑实现有偏差
|
||||
- 工具类使用不当
|
||||
|
||||
**解决方案**:
|
||||
1. 对比Java源码,逐行对齐
|
||||
2. 使用框架提供的工具类(JsonUtils、FileUtils等)
|
||||
3. 确保异常处理逻辑一致
|
||||
4. 使用NestJS的HttpException系列,不要使用已删除的BaseException
|
||||
|
||||
### 问题4:使用了已删除的机械Java迁移内容
|
||||
|
||||
**症状**:
|
||||
- 编译错误:Cannot find module './exception/base-exception'
|
||||
- 编译错误:Cannot find module './config/global-config'
|
||||
- 编译错误:Cannot find module './annotation/sa-not-check-login'
|
||||
|
||||
**原因**:
|
||||
- 使用了已删除的机械Java迁移内容
|
||||
|
||||
**解决方案**:
|
||||
```typescript
|
||||
// ❌ 已删除:BaseException
|
||||
import { BaseException } from '../../common/exception';
|
||||
throw new BaseException('错误');
|
||||
|
||||
// ✅ 替换为:HttpException系列
|
||||
import { BadRequestException } from '@nestjs/common';
|
||||
throw new BadRequestException({ msg_key: 'error.common.operation_failed' });
|
||||
|
||||
// ❌ 已删除:GlobalConfig
|
||||
import { GlobalConfig } from '../../common/config';
|
||||
const prefix = GlobalConfig.tablePrefix;
|
||||
|
||||
// ✅ 替换为:AppConfigService
|
||||
constructor(private readonly appConfig: AppConfigService) {}
|
||||
const prefix = this.appConfig.tablePrefix;
|
||||
|
||||
// ❌ 已删除:SaNotCheckLogin
|
||||
import { SaNotCheckLogin } from '../../common/annotation';
|
||||
@SaNotCheckLogin()
|
||||
async publicMethod() {}
|
||||
|
||||
// ✅ 替换为:@Public
|
||||
import { Public } from '@wwjBoot';
|
||||
@Public()
|
||||
async publicMethod() {}
|
||||
```
|
||||
|
||||
## 📈 迁移进度跟踪
|
||||
|
||||
### 模块迁移状态
|
||||
|
||||
| 模块 | 实体 | DTO | Service | Controller | 状态 |
|
||||
|------|------|-----|---------|------------|------|
|
||||
| Auth | ✅ | ✅ | ✅ | ✅ | ✅ 完成 |
|
||||
| User | ✅ | ✅ | ⚠️ | ⚠️ | 🔄 进行中 |
|
||||
| Member | ✅ | ✅ | ⚠️ | ⚠️ | 🔄 进行中 |
|
||||
| Order | ✅ | ✅ | ❌ | ❌ | 📋 待开始 |
|
||||
| Pay | ✅ | ✅ | ❌ | ❌ | 📋 待开始 |
|
||||
| Addon | ✅ | ✅ | ⚠️ | ⚠️ | 🔄 进行中 |
|
||||
|
||||
**图例**:
|
||||
- ✅ 完成:已对齐Java逻辑,测试通过
|
||||
- ⚠️ 进行中:代码已生成,业务逻辑对齐中
|
||||
- ❌ 待开始:代码已生成,未开始业务逻辑对齐
|
||||
|
||||
### 统计数据
|
||||
|
||||
- **实体文件**:89/89 (100%)
|
||||
- **DTO文件**:732/732 (100%)
|
||||
- **Service文件**:158/158 (100%) - 骨架完成,业务逻辑对齐中
|
||||
- **Controller文件**:110/110 (100%) - 骨架完成,业务逻辑对齐中
|
||||
|
||||
## 🎓 最佳实践
|
||||
|
||||
### 1. 一次对齐一个模块
|
||||
|
||||
**不要**:同时修改多个模块
|
||||
**要**:按模块优先级,逐个完整对齐
|
||||
|
||||
### 2. 先对齐核心流程,再对齐边界情况
|
||||
|
||||
**优先级**:
|
||||
1. 正常流程(happy path)
|
||||
2. 异常处理
|
||||
3. 边界情况
|
||||
4. 性能优化
|
||||
|
||||
### 3. 保持Java代码对照
|
||||
|
||||
**方法**:
|
||||
- 左侧打开Java源码
|
||||
- 右侧编写NestJS代码
|
||||
- 逐行对比,确保一致
|
||||
|
||||
### 4. 使用框架能力,不要重复造轮子
|
||||
|
||||
**使用框架提供的**:
|
||||
- ✅ AuthService(认证)
|
||||
- ✅ CacheService(缓存)
|
||||
- ✅ AppConfigService(配置,替代GlobalConfig)
|
||||
- ✅ JsonUtils、FileUtils(工具类)
|
||||
- ✅ HttpException系列(异常处理,替代BaseException)
|
||||
- ✅ @Public装饰器(替代SaNotCheckLogin)
|
||||
- ✅ ConfigService(配置服务,替代静态配置类)
|
||||
|
||||
**不要自创**:
|
||||
- ❌ 自定义认证逻辑(使用框架的AuthService)
|
||||
- ❌ 自定义缓存逻辑(使用框架的CacheService)
|
||||
- ❌ 自定义工具类(使用框架的工具类)
|
||||
- ❌ 自定义异常类(使用NestJS的HttpException系列)
|
||||
- ❌ 静态配置类(使用AppConfigService/ConfigService)
|
||||
- ❌ Java反射加载(使用NestJS动态模块)
|
||||
|
||||
**已删除的机械Java迁移内容**:
|
||||
- ❌ BaseException系列 → ✅ 使用HttpException/BadRequestException/UnauthorizedException等
|
||||
- ❌ GlobalConfig静态配置 → ✅ 使用AppConfigService(依赖注入)
|
||||
- ❌ SaNotCheckLogin装饰器 → ✅ 使用@Public装饰器
|
||||
- ❌ SystemLoader动态加载 → ✅ 使用NestJS动态模块(DynamicModule)
|
||||
- ❌ EnumUtils工具类 → ✅ 直接使用TypeScript枚举
|
||||
- ❌ ServletUtils工具类 → ✅ 使用@Query/@Body/@Param装饰器
|
||||
|
||||
## 📝 迁移成功标准
|
||||
|
||||
1. ✅ **编译通过**:无TypeScript编译错误
|
||||
2. ✅ **服务启动**:所有模块正确加载
|
||||
3. ✅ **API兼容**:所有接口与Java版本100%一致
|
||||
4. ✅ **数据兼容**:数据库操作100%正确
|
||||
5. ✅ **功能一致**:业务逻辑100%对齐
|
||||
|
||||
### 迁移完成标志
|
||||
|
||||
- [ ] 所有模块编译通过
|
||||
- [ ] 所有服务启动成功
|
||||
- [ ] 所有API测试通过
|
||||
- [ ] 所有数据库操作验证通过
|
||||
- [ ] 与Java版本功能100%一致
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2025-01-11
|
||||
**版本**:v1.0
|
||||
**维护者**:AI Migration Team
|
||||
|
||||
### 3. 保持Java代码对照
|
||||
|
||||
**方法**:
|
||||
- 左侧打开Java源码
|
||||
- 右侧编写NestJS代码
|
||||
- 逐行对比,确保一致
|
||||
|
||||
### 4. 使用框架能力,不要重复造轮子
|
||||
|
||||
**使用框架提供的**:
|
||||
- ✅ AuthService(认证)
|
||||
- ✅ CacheService(缓存)
|
||||
- ✅ AppConfigService(配置,替代GlobalConfig)
|
||||
- ✅ JsonUtils、FileUtils(工具类)
|
||||
- ✅ HttpException系列(异常处理,替代BaseException)
|
||||
- ✅ @Public装饰器(替代SaNotCheckLogin)
|
||||
- ✅ ConfigService(配置服务,替代静态配置类)
|
||||
|
||||
**不要自创**:
|
||||
- ❌ 自定义认证逻辑(使用框架的AuthService)
|
||||
- ❌ 自定义缓存逻辑(使用框架的CacheService)
|
||||
- ❌ 自定义工具类(使用框架的工具类)
|
||||
- ❌ 自定义异常类(使用NestJS的HttpException系列)
|
||||
- ❌ 静态配置类(使用AppConfigService/ConfigService)
|
||||
- ❌ Java反射加载(使用NestJS动态模块)
|
||||
|
||||
**已删除的机械Java迁移内容**:
|
||||
- ❌ BaseException系列 → ✅ 使用HttpException/BadRequestException/UnauthorizedException等
|
||||
- ❌ GlobalConfig静态配置 → ✅ 使用AppConfigService(依赖注入)
|
||||
- ❌ SaNotCheckLogin装饰器 → ✅ 使用@Public装饰器
|
||||
- ❌ SystemLoader动态加载 → ✅ 使用NestJS动态模块(DynamicModule)
|
||||
- ❌ EnumUtils工具类 → ✅ 直接使用TypeScript枚举
|
||||
- ❌ ServletUtils工具类 → ✅ 使用@Query/@Body/@Param装饰器
|
||||
|
||||
## 📝 迁移成功标准
|
||||
|
||||
1. ✅ **编译通过**:无TypeScript编译错误
|
||||
2. ✅ **服务启动**:所有模块正确加载
|
||||
3. ✅ **API兼容**:所有接口与Java版本100%一致
|
||||
4. ✅ **数据兼容**:数据库操作100%正确
|
||||
5. ✅ **功能一致**:业务逻辑100%对齐
|
||||
|
||||
### 迁移完成标志
|
||||
|
||||
- [ ] 所有模块编译通过
|
||||
- [ ] 所有服务启动成功
|
||||
- [ ] 所有API测试通过
|
||||
- [ ] 所有数据库操作验证通过
|
||||
- [ ] 与Java版本功能100%一致
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2025-01-11
|
||||
**版本**:v1.0
|
||||
**维护者**:AI Migration Team
|
||||
|
||||
@@ -1,274 +0,0 @@
|
||||
---
|
||||
description:
|
||||
globs:
|
||||
alwaysApply: true
|
||||
---
|
||||
# 🏷️ 命名规范指南
|
||||
|
||||
## 📋 概述
|
||||
|
||||
本文档为AI开发者提供完整的命名规范指南,确保NestJS项目与PHP项目在业务层面保持100%一致,同时遵循NestJS框架特性。
|
||||
|
||||
## 🎯 核心原则
|
||||
|
||||
1. **业务对齐优先**: 业务逻辑命名与PHP项目保持一致
|
||||
2. **框架规范遵循**: NestJS特有文件类型按NestJS规范
|
||||
3. **可读性保证**: 确保命名清晰、语义明确
|
||||
4. **数据库一致性**: 与PHP项目共用数据库,命名必须完全一致
|
||||
|
||||
## 🏗️ 三大框架命名规范对比
|
||||
|
||||
### 1. PHP (ThinkPHP) 实际命名规范
|
||||
|
||||
基于 `niucloud-php` 项目的实际分析:
|
||||
|
||||
| 文件类型 | 命名规范 | 实际示例 | 说明 |
|
||||
|---------|----------|----------|------|
|
||||
| **控制器** | `PascalCase.php` | `User.php`, `Order.php` | 无Controller后缀 |
|
||||
| **模型** | `PascalCase.php` | `SysUser.php`, `MemberLevel.php` | 直接使用业务名称 |
|
||||
| **验证器** | `PascalCase.php` | `User.php`, `Member.php` | 无Validate后缀 |
|
||||
| **服务** | `PascalCase.php` | `UserService.php`, `OrderService.php` | 有Service后缀 |
|
||||
| **目录** | `snake_case` | `adminapi/`, `validate/`, `model/` | 小写下划线 |
|
||||
|
||||
### 2. Java (Spring Boot) 标准命名规范
|
||||
|
||||
| 文件类型 | 命名规范 | 标准示例 | 说明 |
|
||||
|---------|----------|----------|------|
|
||||
| **控制器** | `PascalCase + Controller.java` | `UserController.java` | 有Controller后缀 |
|
||||
| **实体** | `PascalCase.java` | `User.java`, `Order.java` | 直接使用业务名称 |
|
||||
| **服务** | `PascalCase + Service.java` | `UserService.java` | 有Service后缀 |
|
||||
| **DTO** | `PascalCase + Dto.java` | `CreateUserDto.java` | 有Dto后缀 |
|
||||
| **仓储** | `PascalCase + Repository.java` | `UserRepository.java` | 有Repository后缀 |
|
||||
|
||||
### 3. NestJS 框架标准命名规范
|
||||
|
||||
| 文件类型 | 命名规范 | 标准示例 | 说明 |
|
||||
|---------|----------|----------|------|
|
||||
| **控制器** | `camelCase.controller.ts` | `userController.ts`, `userProfileController.ts` | camelCase + 后缀 |
|
||||
| **实体** | `camelCase.entity.ts` | `userEntity.ts`, `sysUser.entity.ts` | camelCase + 后缀 |
|
||||
| **服务** | `camelCase.service.ts` | `userService.ts`, `userProfileService.ts` | camelCase + 后缀 |
|
||||
| **DTO** | `camelCase.dto.ts` | `createUser.dto.ts`, `updateUser.dto.ts` | camelCase + 后缀 |
|
||||
| **模块** | `camelCase.module.ts` | `userModule.ts`, `adminModule.ts` | camelCase + 后缀 |
|
||||
|
||||
**重要说明**:
|
||||
- **文件名**:使用 `camelCase.suffix.ts` 格式(项目统一规范)
|
||||
- **类名**:使用 `PascalCase` 格式(TypeScript 标准)
|
||||
- **示例**:文件 `userController.ts` 导出类 `UserController`
|
||||
|
||||
## 🎯 统一命名标准(最终规范)
|
||||
|
||||
### 文件命名规范(camelCase + 后缀)
|
||||
|
||||
#### 实体文件命名
|
||||
- **规范**: `{PHP模型名转camelCase}.entity.ts`
|
||||
- **对应关系**: 与 PHP 模型文件一一对应,但使用 camelCase 命名
|
||||
- **示例**:
|
||||
- PHP `SysUser.php` → NestJS `sysUser.entity.ts`
|
||||
- PHP `SysConfig.php` → NestJS `sysConfig.entity.ts`
|
||||
- PHP `MemberLevel.php` → NestJS `memberLevel.entity.ts`
|
||||
|
||||
#### 控制器文件命名
|
||||
- **规范**: `{模块名}.controller.ts`(使用 camelCase)
|
||||
- **示例**: `userController.ts`, `orderController.ts`, `adminController.ts`
|
||||
|
||||
#### 服务文件命名
|
||||
- **规范**: `{模块名}.service.ts`(使用 camelCase)
|
||||
- **示例**: `userService.ts`, `orderService.ts`, `adminService.ts`
|
||||
|
||||
#### DTO文件命名
|
||||
- **规范**: `{操作动词}{模块名}.dto.ts`(使用 camelCase)
|
||||
- **示例**: `createUser.dto.ts`, `updateUser.dto.ts`, `queryAdmin.dto.ts`
|
||||
|
||||
#### 验证器文件命名
|
||||
- **规范**: `{模块名}.validator.ts` (区别于PHP无后缀)
|
||||
- **示例**: `user.validator.ts`, `member.validator.ts`
|
||||
|
||||
#### 模块文件命名
|
||||
- **规范**: `{模块名}.module.ts` (NestJS 标准)
|
||||
- **示例**: `user.module.ts`, `admin.module.ts`, `auth.module.ts`
|
||||
|
||||
### 类命名规范
|
||||
|
||||
#### 实体类命名
|
||||
- **规范**: `PascalCase` (与PHP模型名保持一致)
|
||||
- **示例**: `SysUser`, `SysConfig`, `MemberLevel`
|
||||
|
||||
#### 控制器类命名
|
||||
- **规范**: `PascalCase + Controller`
|
||||
- **示例**: `UserController`, `AdminController`, `AuthController`
|
||||
|
||||
#### 服务类命名
|
||||
- **规范**: `PascalCase + Service`
|
||||
- **示例**: `UserService`, `OrderService`, `AdminService`
|
||||
|
||||
#### DTO类命名
|
||||
- **规范**: `{操作动词}{模块名}Dto`
|
||||
- **示例**: `CreateUserDto`, `UpdateOrderDto`, `QueryMemberDto`
|
||||
|
||||
### 方法命名规范
|
||||
|
||||
#### 业务逻辑方法
|
||||
**优先与PHP项目保持一致,NestJS特有方法按NestJS规范**
|
||||
|
||||
- **CRUD方法**: 与PHP项目方法名保持一致
|
||||
- **查询方法**: 与PHP项目方法名保持一致
|
||||
- **业务方法**: 与PHP项目方法名保持一致
|
||||
- **NestJS生命周期方法**: 按NestJS规范,如 `onModuleInit()`, `onApplicationBootstrap()`
|
||||
|
||||
#### 变量命名规范
|
||||
**业务变量优先与PHP项目保持一致,NestJS特有变量按NestJS规范**
|
||||
|
||||
- **业务变量**: 与PHP项目变量名保持一致
|
||||
- **业务常量**: 与PHP项目常量名保持一致
|
||||
- **NestJS注入变量**: 按NestJS规范,如 `private readonly userService: UserService`
|
||||
- **TypeORM相关变量**: 按TypeORM规范,如 `@InjectRepository(User)`
|
||||
|
||||
## 🗄️ 数据库命名规范
|
||||
|
||||
### 重要约束
|
||||
**与PHP项目共用数据库,必须保持命名100%一致**
|
||||
|
||||
- **表名**: 与PHP项目完全一致,包括前缀和命名方式
|
||||
- **字段名**: 与PHP项目完全一致,不能修改任何字段名
|
||||
- **字段类型**: 与PHP项目完全一致,不能修改字段类型
|
||||
- **索引结构**: 与PHP项目完全一致,不能添加或删除索引
|
||||
|
||||
### 实体映射规范
|
||||
|
||||
```typescript
|
||||
// 正确示例:与PHP模型SysUser.php对应
|
||||
@Entity('sys_user') // 表名与PHP项目一致
|
||||
export class SysUser {
|
||||
@PrimaryGeneratedColumn()
|
||||
id: number; // 字段名与PHP项目一致
|
||||
|
||||
@Column({ name: 'username', length: 50 })
|
||||
username: string; // 字段名与PHP项目一致
|
||||
|
||||
@Column({ name: 'created_at', type: 'timestamp' })
|
||||
createdAt: Date; // 字段名与PHP项目一致
|
||||
}
|
||||
```
|
||||
|
||||
## 📁 目录结构命名规范
|
||||
|
||||
### 标准模块目录结构
|
||||
```
|
||||
src/common/{模块名}/
|
||||
├── {模块名}.module.ts # 模块定义文件
|
||||
├── controllers/ # 控制器目录
|
||||
│ ├── adminapi/ # 管理端控制器目录(对应PHP adminapi/controller)
|
||||
│ │ └── {模块名}.controller.ts
|
||||
│ └── api/ # 前台控制器目录(对应PHP api/controller)
|
||||
│ └── {模块名}.controller.ts
|
||||
├── services/ # 服务目录
|
||||
│ ├── admin/ # 管理端服务目录(对应PHP service/admin)
|
||||
│ │ └── {模块名}.service.ts
|
||||
│ ├── api/ # 前台服务目录(对应PHP service/api)
|
||||
│ │ └── {模块名}.service.ts
|
||||
│ └── core/ # 核心服务目录(对应PHP service/core)
|
||||
│ └── {模块名}.service.ts
|
||||
├── entity/ # 实体目录(对应PHP model)
|
||||
│ ├── {实体名}.entity.ts # 实体文件(camelCase.entity.ts 格式)
|
||||
│ └── {配置实体}.entity.ts # 配置实体文件
|
||||
├── dto/ # DTO 目录(对应PHP validate)
|
||||
│ ├── admin/ # 管理端DTO目录
|
||||
│ │ ├── create-{模块名}.dto.ts
|
||||
│ │ └── update-{模块名}.dto.ts
|
||||
│ └── api/ # 前台DTO目录
|
||||
│ ├── {操作}-{模块}.dto.ts
|
||||
│ └── {操作}-{模块}.dto.ts
|
||||
├── guards/ # 守卫目录(可选)
|
||||
├── decorators/ # 装饰器目录(可选)
|
||||
├── interfaces/ # 接口目录(可选)
|
||||
└── enums/ # 枚举目录(可选)
|
||||
```
|
||||
|
||||
### 实际示例(基于auth模块)
|
||||
```
|
||||
src/common/auth/
|
||||
├── auth.module.ts
|
||||
├── controllers/
|
||||
│ ├── adminapi/
|
||||
│ │ └── auth.controller.ts # 管理端控制器
|
||||
│ └── api/
|
||||
│ └── auth.controller.ts # 前台控制器
|
||||
├── services/
|
||||
│ ├── admin/
|
||||
│ │ └── auth.service.ts # 管理端服务
|
||||
│ ├── api/
|
||||
│ │ └── auth.service.ts # 前台服务
|
||||
│ └── core/
|
||||
│ └── auth.service.ts # 核心服务
|
||||
├── entity/
|
||||
│ └── auth-token.entity.ts # 实体文件
|
||||
├── dto/
|
||||
│ ├── admin/
|
||||
│ │ ├── create-auth.dto.ts # 管理端DTO
|
||||
│ │ └── update-auth.dto.ts
|
||||
│ └── api/
|
||||
│ ├── login.dto.ts # 前台DTO
|
||||
│ └── register.dto.ts
|
||||
├── guards/
|
||||
│ ├── global-auth.guard.ts
|
||||
│ ├── jwt-auth.guard.ts
|
||||
│ └── roles.guard.ts
|
||||
├── decorators/
|
||||
│ ├── roles.decorator.ts
|
||||
│ ├── public.decorator.ts
|
||||
│ └── user-context.decorator.ts
|
||||
└── interfaces/
|
||||
└── user.interface.ts
|
||||
```
|
||||
|
||||
## 🚫 命名禁止规则
|
||||
|
||||
### 绝对禁止的命名行为
|
||||
|
||||
1. **🚫 禁止修改数据库相关命名**
|
||||
- 不能修改表名、字段名、索引名
|
||||
- 不能修改字段类型和长度
|
||||
- 必须与PHP项目数据库结构100%一致
|
||||
|
||||
2. **🚫 禁止自创业务方法名**
|
||||
- 业务方法名必须与PHP项目对应方法保持一致
|
||||
- 不能随意创造新的业务方法名
|
||||
|
||||
3. **🚫 禁止使用非标准缩写**
|
||||
- 避免使用不明确的缩写,如 `usr` 代替 `user`
|
||||
- 避免使用中文拼音命名
|
||||
|
||||
4. **🚫 禁止混合命名风格**
|
||||
- 同一项目内必须保持命名风格一致
|
||||
- 不能在同一文件中混用不同的命名规范
|
||||
|
||||
## ✅ 命名检查清单
|
||||
|
||||
### 开发前检查
|
||||
- [ ] 已查看对应的PHP源码文件命名
|
||||
- [ ] 已确认数据库表结构和字段命名
|
||||
- [ ] 已理解业务逻辑和方法命名
|
||||
- [ ] 已确认模块目录结构规范
|
||||
|
||||
### 开发中检查
|
||||
- [ ] 实体类名与PHP模型名保持一致
|
||||
- [ ] 数据库表名和字段名与PHP项目一致
|
||||
- [ ] 业务方法名与PHP项目对应方法一致
|
||||
- [ ] 文件命名符合NestJS规范
|
||||
|
||||
### 开发后检查
|
||||
- [ ] 所有命名符合统一标准
|
||||
- [ ] 没有使用禁止的命名方式
|
||||
- [ ] 目录结构清晰规范
|
||||
- [ ] 文档和注释命名准确
|
||||
|
||||
## 📚 相关文档
|
||||
|
||||
- [AI智能体工作流程指南](./AI-WORKFLOW-GUIDE.md)
|
||||
- [AI开发禁止规则](./AI-DEVELOPMENT-RULES.md)
|
||||
- [三框架原则对比](./FRAMEWORK-PRINCIPLES.md)
|
||||
- [项目整体结构参考](./PROJECT-STRUCTURE.md)
|
||||
|
||||
---
|
||||
|
||||
**重要提醒**: 命名规范是代码质量的基础,所有AI开发者必须严格遵循此命名规范,确保项目的一致性和可维护性。
|
||||
Reference in New Issue
Block a user