chore(release): unify to wwjcloud across backend/frontend; routes, DTO/VO paths, docs/links; remove niucloud; naming fixes

This commit is contained in:
wanwu
2025-11-13 19:26:41 +08:00
parent 5c1647df7c
commit 3163f56894
1192 changed files with 89154 additions and 9118 deletions

View File

@@ -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项目
- 构建中央数据仓库CDRService方法签名索引、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 开启;多仓储共享同一 EntityManagerCore 不直接操作事务对象
- 队列: 用例完成后入队;载荷仅传关键 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/`

View File

@@ -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. 最佳实践
- **经验总结**: 总结成功经验,形成最佳实践
- **案例分享**: 分享典型案例,促进团队学习
- **标准制定**: 制定团队标准,确保一致性

View 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;
}
```
### 原则3API接口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连接成功
### 检查点3API测试
```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); // 删除
```
**要求**
- ✅ 数据正确写入数据库
- ✅ 数据正确从数据库读取
- ✅ 字段映射正确
- ✅ 类型转换正确
## 🚨 常见问题与解决方案
### 问题1Repository无法注入
**症状**
```
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()]
```
### 问题2DTO类型不匹配
**症状**
```
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

View File

@@ -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开发者必须严格遵循此命名规范确保项目的一致性和可维护性。