框架层面: 100% 使用 NestJS 的方式 业务层面: 与 PHP 项目保持 100% 一致 数据层面: 与 PHP 项目数据库结构 100% 一致 ## 🏗️ 架构设计三原则 1. **功能组织结构** → 参考 Java/Spring Boot 分层架构,但采用微服务导向的模块化设计 - **模块化优先**:按业务域划分模块(如user、order、payment),而非按技术层级划分 - **单体向微服务演进**:每个模块内部完整包含Controller、Service、Entity、DTO等层级 - **模块自治**:每个模块可独立开发、测试、部署,为后续微服务拆分做准备 - **层级内聚**:模块内部按Spring Boot分层架构组织(Controller→Service→Repository→Entity) - **模块间解耦**:模块间通过明确的接口和事件进行通信,避免直接依赖 **微服务架构层级规划**: - **config层**:框架配置中心微服务(数据库配置、环境变量、第三方服务配置) - **core层**:基础通用业务微服务(认证、权限、日志、缓存等基础能力) - **common层**:业务模块微服务集合(采用模块化设计,每个模块为独立的业务域) **common层模块化设计原则**: - 按业务域模块化组织:`common/user/`、`common/order/`、`common/payment/` - 每个模块内部完整分层:`controllers/`、`services/`、`entity/`、`dto/`、`module.ts` - 模块间通过接口和事件通信,避免直接文件导入依赖 - 为未来微服务拆分预留清晰的边界 2. **功能复写实现** → 参考 PHP项目 的业务逻辑 - 所有业务逻辑必须严格基于PHP项目真实代码 - API接口功能与PHP控制器保持100%一致 - 数据处理流程与PHP服务层保持100%一致 - 业务规则与PHP验证器保持100%一致 3. **框架特性使用** → 使用 NestJS 的技术特性 - 依赖注入(DI):模块化管理,服务注入 - 装饰器(Decorators):路由定义,参数验证,权限控制 - 管道(Pipes):数据转换,输入验证 - 守卫(Guards):身份认证,权限验证 - 拦截器(Interceptors):请求响应处理,日志记录 - 模块化(Modules):功能模块划分,依赖管理 # 🤖 多智能体协作工作流程(AI开发规范) ## 🤖 多智能体协作工作流程(AI开发规范) ## 🚫 AI开发严格约束条件(必须遵守) ### 绝对禁止的AI行为 1. **🚫 禁止自创业务逻辑** - 所有业务逻辑必须严格基于PHP项目真实代码 2. **🚫 禁止假设数据结构** - 所有数据结构必须基于 `g:\wwjcloud-nestjs\sql\wwjcloud.sql` 真实表结构 3. **🚫 禁止使用默认值** - 所有字段、方法、配置必须基于PHP项目真实值 4. **🚫 禁止编写骨架代码** - 不允许生成空方法、TODO注释或占位符代码 5. **🚫 禁止写死数据** - 不允许硬编码任何业务数据或配置 6. **🚫 禁止猜测API接口** - 所有接口必须基于PHP控制器真实方法 7. **🚫 禁止随意命名** - 所有命名必须遵循既定规范,不允许自由发挥 8. **🚫 禁止跳过验证** - 每个生成的文件都必须经过严格验证 ### 必须遵循的数据源 - **数据库结构**: `g:\wwjcloud-nestjs\sql\wwjcloud.sql` (唯一权威数据源) - **PHP控制器**: `niucloud-php\niucloud\app\adminapi\controller\` (API接口定义) - **PHP服务层**: `niucloud-php\niucloud\app\service\` (业务逻辑实现) - **PHP模型**: `niucloud-php\niucloud\app\model\` (数据模型定义) - **PHP验证器**: `niucloud-php\niucloud\app\validate\` (数据验证规则) ### AI开发质量标准 - **数据库字段映射准确率**: 100% - **PHP方法对应准确率**: 100% - **业务逻辑一致性**: 100% - **代码可直接运行**: 100% - **命名规范符合率**: 100% ### AI开发检查清单 - [ ] 已查看对应的PHP源码文件 - [ ] 已查看相关的数据库表结构 - [ ] 已理解真实的业务逻辑 - [ ] 已确认所有依赖关系 - [ ] 已验证生成代码的正确性 - [ ] 已使用auto-mapping-checker.js验证 ## 智能体角色定义(按执行顺序标注) - **S1 需求分析体(Analyzer)**: 解析需求、对应 PHP/Nest 规范、输出任务切分与验收标准 - **S2 架构治理体(Architect)**: 校验分层/依赖/目录规范,给出重构建议与边界清单 - **S3 基建接入体(InfraOperator)**: 接入/校验 Kafka、Redis、队列、事务与配置,提供接入差异与示例 - **S4 开发执行体(Developer)**: 按规范编码、编写测试、修复构建(严格禁止自创、假设、默认值) - **S5 安全基线体(SecurityGuard)**: 检查守卫、跨租户(site_id)隔离、敏感信息暴露(开发中与提测前各执行一次) - **S6 质量门禁体(QualityGate)**: 聚合 ESLint/TS/覆盖率/e2e 结果,低于阈值阻断合并 - **S7 规范审计体(Auditor)**: 按清单逐项核查,出具差异报告与修复项 - **S8 上线管控体(Release)**: 构建、变更说明、灰度计划与回滚预案 - **S9 性能优化体(PerfTuner)**: 建议缓存/异步化/批处理,识别大对象传输与 N+1(开发后期与上线后持续执行) - **S10 命名规范体(NamingGuard)**: 检查文件/类/方法/变量命名规范,确保符合大厂标准(开发中持续执行) ## 🔄 串联流程(带顺序) 1. **S1 Analyzer** → 输入业务需求,输出模块划分、路由表、DTO、实体字段清单 2. **S2 Architect** → 校验模块目录、分层、依赖方向,输出设计说明 3. **S3 InfraOperator** → 接入基础设施,产出接入差异与示例代码 4. **S4 Developer** → 实现业务逻辑,接入守卫、管道、拦截器 5. **S5 SecurityGuard(第一次)** → 开发阶段安全检查 6. **S6 QualityGate** → CI阶段质量检查,不达标阻断合并 7. **S7 Auditor** → 提测前规范审计 8. **S5 SecurityGuard(第二次)** → 提测前安全复检 9. **S9 PerfTuner** → 性能优化建议(并行/持续) 10. **S10 NamingGuard** → 命名规范检查(开发中持续执行) 11. **S8 Release** → 上线管控 ## 🛠️ 自动化工具集成 ### auto-mapping-checker.js 使用指南 ```bash # 检查PHP和NestJS项目对应关系 node auto-mapping-checker.js # 检查结果解读: # ✅ 表示文件对应正确 # ❌ 表示PHP存在但NestJS缺失 # 📊 统计信息:检查模块数、发现问题数 ``` ### 工具检查维度 - **模块对应性**: PHP模块与NestJS模块一一对应 - **分层完整性**: 控制器、服务、实体等层级完整 - **文件命名规范**: 确保命名符合各自框架规范 - **业务逻辑一致性**: 功能实现与PHP项目保持一致 # AI 框架功能对比图 - NestJS vs ThinkPHP ## 📋 概述 本文档为 AI 开发者提供 NestJS 和 ThinkPHP 框架的详细对比,包含功能映射、开发规范、命名约定和目录结构对比,确保 AI 能够更好地理解和开发功能。 **重要原则:既要尊重 NestJS 框架特性,又要与 PHP 项目业务逻辑保持一致** ## 🔄 核心功能映射 ### 1. 基础架构对比 | 功能模块 | ThinkPHP | NestJS | 对应关系 | 实现方式 | |---------|----------|---------|----------|----------| | **路由系统** | `Route::get()` | `@Get()` | ✅ 直接对应 | 装饰器路由 | | **控制器** | `Controller` | `@Controller()` | ✅ 直接对应 | 装饰器控制器 | | **中间件** | `Middleware` | `@UseGuards()` | ✅ 功能对应 | 守卫/拦截器 | | **依赖注入** | `Container::get()` | `constructor()` | ✅ 更强大 | 自动注入 | | **数据验证** | `Validate` | `@UsePipes()` | ✅ 功能对应 | 验证管道 | | **异常处理** | `Exception` | `@UseFilters()` | ✅ 功能对应 | 异常过滤器 | ### 2. 数据库操作对比 | 功能模块 | ThinkPHP | NestJS | 对应关系 | 实现方式 | |---------|----------|---------|----------|----------| | **模型定义** | `Model` | `@Entity()` | ✅ 功能对应 | TypeORM 实体 | | **查询构建** | `Db::table()` | `Repository` | ✅ 功能对应 | TypeORM 仓库 | | **关联关系** | `hasMany()` | `@OneToMany()` | ✅ 功能对应 | TypeORM 关联 | | **事务处理** | `Db::startTrans()` | `@Transaction()` | ✅ 功能对应 | TypeORM 事务 | | **软删除** | `SoftDelete` | `@DeleteDateColumn()` | ✅ 功能对应 | TypeORM 软删除 | ### 3. 缓存和会话 | 功能模块 | ThinkPHP | NestJS | 对应关系 | 实现方式 | |---------|----------|---------|----------|----------| | **缓存管理** | `Cache::get()` | `@Inject(CACHE_MANAGER)` | ✅ 功能对应 | Cache Manager | | **会话管理** | `Session` | `@Session()` | ✅ 功能对应 | Session 装饰器 | | **Redis 集成** | `Redis::get()` | `@InjectRedis()` | ✅ 功能对应 | Redis 模块 | ## 🏗️ 目录结构对比 ### ThinkPHP 目录结构 ``` thinkphp/ ├── app/ # 应用目录 │ ├── controller/ # 控制器 │ ├── model/ # 模型 │ ├── service/ # 服务层 │ └── middleware/ # 中间件 ├── config/ # 配置文件 ├── public/ # 公共资源 ├── route/ # 路由定义 └── vendor/ # 第三方包 ``` ### NestJS 目录结构 ``` wwjcloud/ ├── src/ # 源代码目录 │ ├── common/ # 通用服务层 (对应 ThinkPHP app/) │ │ ├── auth/ # 认证授权模块 │ │ ├── member/ # 会员管理模块 │ │ ├── sys/ # 系统管理模块 │ │ ├── site/ # 站点管理模块 │ │ ├── addon/ # 插件管理模块 │ │ ├── upload/ # 文件上传模块 │ │ └── ... # 其他业务模块 │ ├── config/ # 配置管理层 (对应 ThinkPHP config/) │ │ ├── database/ # 数据库配置 │ │ ├── redis/ # Redis配置 │ │ ├── jwt/ # JWT配置 │ │ └── app/ # 应用配置 │ ├── core/ # 核心基础设施层 (对应 ThinkPHP 核心) │ │ ├── base/ # 基础类 │ │ ├── database/ # 数据库核心 │ │ ├── security/ # 安全核心 │ │ └── interceptors/ # 拦截器 │ └── vendor/ # 第三方服务适配层 (对应 ThinkPHP vendor/) │ ├── payment/ # 支付适配器 │ ├── storage/ # 存储适配器 │ └── sms/ # 短信适配器 ├── public/ # 公共资源 └── package.json # 依赖管理 ``` ### 层级对应关系 | 层级 | ThinkPHP | NestJS | 说明 | |------|----------|---------|------| | **应用层** | `app/` | `src/common/` | 业务逻辑和通用服务 | | **配置层** | `config/` | `src/config/` | 配置管理和环境变量 | | **核心层** | 框架核心 | `src/core/` | 基础设施和核心功能 | | **适配层** | `vendor/` | `src/vendor/` | 第三方服务集成 | ## 📝 命名规范和约束 ### 1. 数据库命名规范 **重要约束:与 PHP 项目共用数据库,必须保持命名一致** - **表名**: 与 PHP 项目完全一致,包括前缀和命名方式 - **字段名**: 与 PHP 项目完全一致,不能修改任何字段名 - **字段类型**: 与 PHP 项目完全一致,不能修改字段类型 - **索引结构**: 与 PHP 项目完全一致,不能添加或删除索引 **原则:看到 PHP 项目怎么命名,我们就怎么命名,保持 100% 一致** ### 2. 代码命名规范 #### 类名规范 - **实体类**: 使用 PascalCase,如 `User`, `OrderDetail` - **服务类**: 使用 PascalCase + Service,如 `UserService`, `OrderService` - **控制器**: 使用 PascalCase + Controller,如 `UserController` - **DTO 类**: 使用 PascalCase + Dto,如 `CreateUserDto`, `UpdateUserDto` #### 方法名规范 **业务逻辑方法优先与 PHP 项目保持一致,NestJS 特有方法按 NestJS 规范:** - **CRUD 方法**: 与 PHP 项目方法名保持一致 - **查询方法**: 与 PHP 项目方法名保持一致 - **业务方法**: 与 PHP 项目方法名保持一致 - **NestJS 生命周期方法**: 按 NestJS 规范,如 `onModuleInit()`, `onApplicationBootstrap()` **原则:业务逻辑与 PHP 保持一致,NestJS 特性按 NestJS 规范** #### 变量名规范 **业务变量优先与 PHP 项目保持一致,NestJS 特有变量按 NestJS 规范:** - **业务变量**: 与 PHP 项目变量名保持一致 - **业务常量**: 与 PHP 项目常量名保持一致 - **NestJS 注入变量**: 按 NestJS 规范,如 `private readonly userService: UserService` - **TypeORM 相关变量**: 按 TypeORM 规范,如 `@InjectRepository(User)` **原则:业务变量与 PHP 保持一致,NestJS 特性按 NestJS 规范** ### 3. 文件命名规范 #### 目录结构 ``` src/common/{模块名}/ ├── {模块名}.module.ts # 模块定义文件 ├── controllers/ # 控制器目录 │ ├── adminapi/ # 管理端控制器(可选) │ └── api/ # 前台控制器(可选) ├── services/ # 服务目录 │ ├── admin/ # 管理端服务(可选) │ ├── api/ # 前台服务(可选) │ └── core/ # 核心服务 ├── entity/ # 实体目录 │ ├── {实体名}.ts # 实体文件(PascalCase.ts格式) │ └── {配置实体}.ts # 配置实体文件 ├── dto/ # DTO 目录 │ ├── admin/ # 管理端DTO(可选) │ ├── api/ # 前台DTO(可选) │ └── {操作}Dto.ts # DTO文件(PascalCase.ts格式) ├── guards/ # 守卫目录(可选) ├── decorators/ # 装饰器目录(可选) ├── interfaces/ # 接口目录(可选) └── enums/ # 枚举目录(可选) ``` **实际示例(基于auth模块)**: ``` src/common/auth/ ├── auth.module.ts ├── controllers/ │ ├── AuthController.ts │ ├── adminapi/ │ └── api/ ├── services/ │ ├── AuthService.ts │ ├── admin/ │ ├── api/ │ └── core/ ├── entity/ │ └── AuthToken.ts ├── dto/ │ ├── AuthDto.ts │ ├── admin/ │ └── api/ ├── guards/ │ ├── GlobalAuthGuard.ts │ ├── JwtAuthGuard.ts │ └── RolesGuard.ts ├── decorators/ │ ├── RolesDecorator.ts │ ├── public.decorator.ts │ └── user-context.decorator.ts └── interfaces/ └── user.interface.ts ``` # 🏗️ 三大框架命名规范对比与统一标准 ## 📋 框架命名规范对比表 ### 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) 标准命名规范 1 2 | 文件类型 | 命名规范 | 标准示例 | 说明 | |---------|----------|----------|------| | **控制器** | `PascalCase + Controller.java` | `UserController.java`, `OrderController.java` | 有Controller后缀 | | **实体** | `PascalCase.java` | `User.java`, `Order.java` | 直接使用业务名称 | | **服务** | `PascalCase + Service.java` | `UserService.java`, `OrderService.java` | 有Service后缀 | | **DTO** | `PascalCase + Dto.java` | `CreateUserDto.java`, `UserResponseDto.java` | 有Dto后缀 | | **仓储** | `PascalCase + Repository.java` | `UserRepository.java` | 有Repository后缀 | | **目录** | `camelCase` | `controller/`, `service/`, `dto/` | 驼峰命名 | ### 3. NestJS 框架标准命名规范 | 文件类型 | 命名规范 | 标准示例 | 说明 | |---------|----------|----------|------| | **控制器** | `camelCase.controller.ts` | `user.controller.ts`, `order.controller.ts` | 小写驼峰+后缀 | | **实体** | `camelCase.entity.ts` | `user.entity.ts`, `sysUser.entity.ts` | 小写驼峰+后缀 | | **服务** | `camelCase.service.ts` | `user.service.ts`, `order.service.ts` | 小写驼峰+后缀 | | **DTO** | `PascalCase.ts` | `CreateUserDto.ts`, `UpdateUserDto.ts` | 项目实际使用格式 | | **模块** | `camelCase.module.ts` | `user.module.ts`, `admin.module.ts` | 小写驼峰+后缀 | | **目录** | `camelCase` | `controller/`, `service/`, `dto/` | 驼峰命名 | ## 🎯 统一命名标准(最终规范) ### 核心原则 1. **业务对齐优先**: 业务逻辑命名与PHP项目保持一致 2. **框架规范遵循**: NestJS特有文件类型按NestJS规范 3. **可读性保证**: 确保命名清晰、语义明确 ### 文件命名规范(最终版) #### 实体文件命名 - **规范**: `{PHP模型名首字母小写}.entity.ts` - **对齐原则**: 与PHP模型名保持业务一致性 - **示例**: - PHP `SysUser.php` → NestJS `sysUser.entity.ts` - PHP `SysConfig.php` → NestJS `sysConfig.entity.ts` - PHP `MemberLevel.php` → NestJS `memberLevel.entity.ts` #### 控制器文件命名 - **规范**: `{模块名}.controller.ts` (NestJS 标准) - **示例**: `user.controller.ts`, `order.controller.ts`, `admin.controller.ts` #### 服务文件命名 - **规范**: `{模块名}.service.ts` (NestJS 标准) - **示例**: `user.service.ts`, `order.service.ts`, `admin.service.ts` #### DTO文件命名 - **规范**: `{操作动词}{模块名}Dto.ts` (项目实际使用格式) - **示例**: `CreateUserDto.ts`, `UpdateUserDto.ts`, `QueryAdminDto.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`, `AdminService`, `AuthService` #### DTO类命名 - **规范**: `操作动词 + 模块名 + Dto` - **示例**: `CreateUserDto`, `UpdateAdminDto`, `QueryMemberDto` ### 方法命名规范(最终版) #### 业务方法命名 - **规范**: 与PHP项目方法名保持一致 (camelCase) - **示例**: - PHP `getUserList()` → NestJS `getUserList()` - PHP `addUser()` → NestJS `addUser()` #### NestJS生命周期方法 - **规范**: 按NestJS标准 (camelCase) - **示例**: `onModuleInit()`, `onApplicationBootstrap()` #### HTTP路由方法 - **规范**: RESTful风格 (camelCase) - **示例**: `findAll()`, `findOne()`, `create()`, `update()`, `remove()` ### 变量命名规范(最终版) #### 业务变量 - **规范**: 与PHP项目变量名保持一致 (camelCase) - **示例**: `userId`, `userName`, `siteId` #### 框架注入变量 - **规范**: 按NestJS/TypeScript标准 - **示例**: `private readonly userService: UserService` #### 常量命名 - **规范**: `UPPER_SNAKE_CASE` - **示例**: `MAX_RETRY_COUNT`, `DEFAULT_PAGE_SIZE` ## 🔍 命名规范检查清单 ### PHP项目对齐检查 - [ ] 实体类名与PHP模型类名一致 - [ ] 业务方法名与PHP项目一致 - [ ] 业务变量名与PHP项目一致 - [ ] 数据库字段名与PHP项目一致 ### NestJS规范检查 - [ ] 文件名使用小写驼峰+后缀格式 - [ ] 类名使用大写驼峰格式 - [ ] 装饰器使用正确 - [ ] 模块导入导出正确 ### 一致性检查 - [ ] 同一概念在不同文件中命名一致 - [ ] 缩写使用统一标准 - [ ] 特殊字符使用规范 - [ ] 语义表达清晰准确 #### 🔍 自动化检查工具 使用 `auto-mapping-checker.js` 工具检查文件命名规范: ```bash # 检查所有模块的文件对应关系 node auto-mapping-checker.js # 重点检查项: # 1. 实体文件是否对应PHP模型 # 2. 文件命名是否符合规范 # 3. 模块结构是否完整 ``` **原则:NestJS 特有的文件类型按 NestJS 规范,业务逻辑与 PHP 保持一致** ## 🔧 开发约束和规范 ### 1. 数据库约束 #### 必须遵守的规则 - **表结构**: 与 PHP 项目完全一致,不能修改任何结构 - **索引**: 与 PHP 项目完全一致,不能修改索引 - **外键**: 与 PHP 项目完全一致,不能修改外键 - **触发器**: 与 PHP 项目完全一致,不能修改触发器 #### 数据一致性 - **事务处理**: 与 PHP 项目保持一致的事务处理方式 - **软删除**: 与 PHP 项目保持一致的软删除方式 - **状态管理**: 与 PHP 项目保持一致的状态管理方式 **原则:PHP 项目怎么做,我们就怎么做,保持 100% 一致** ### 2. API 设计约束 #### 接口规范 - **URL 格式**: 与 PHP 项目完全一致 - **请求方法**: 与 PHP 项目完全一致 - **响应格式**: 与 PHP 项目完全一致 - **错误处理**: 与 PHP 项目完全一致 **原则:PHP 项目怎么设计接口,我们就怎么设计,保持 100% 一致** #### 权限控制 - **认证**: 与 PHP 项目保持一致的认证方式 - **授权**: 与 PHP 项目保持一致的授权方式 - **数据隔离**: 与 PHP 项目保持一致的数据隔离方式 **原则:PHP 项目怎么控制权限,我们就怎么控制,保持 100% 一致** ### 3. 代码质量约束 #### 类型安全 - **必须使用 TypeScript**: 不允许使用 `any` 类型 - **接口定义**: 所有 DTO 和响应对象必须有接口定义 - **类型检查**: 启用严格模式,不允许隐式类型转换 #### 错误处理 - **异常捕获**: 与 PHP 项目保持一致的异常处理方式 - **日志记录**: 与 PHP 项目保持一致的日志记录方式 - **错误响应**: 与 PHP 项目保持一致的错误响应格式 **原则:PHP 项目怎么处理错误,我们就怎么处理,保持 100% 一致** ## 🚀 AI 开发指南 ### 1. 开发流程 #### 创建新功能模块 1. **分析需求**: 确定功能属于哪个层级 (common/config/core/vendor) 2. **参考 PHP 项目**: 查看 PHP 项目如何实现相同功能 3. **保持一致性**: 与 PHP 项目保持 100% 一致 4. **创建组件**: 按照 NestJS 规范创建相应的组件 5. **配置模块**: 在相应的模块中注册组件 #### 开发原则 **既要尊重 NestJS 框架特性,又要与 PHP 项目业务逻辑保持一致** - **框架特性**: 按照 NestJS 规范使用装饰器、依赖注入、管道等特性 - **业务逻辑**: 与 PHP 项目保持 100% 一致 - **数据操作**: 与 PHP 项目保持 100% 一致 - **接口设计**: 与 PHP 项目保持 100% 一致 ### 2. 常见问题解决 #### 常见问题解决原则 **遇到问题时,首先查看 PHP 项目是如何解决的,然后按照相同方式解决** - **数据库问题**: 参考 PHP 项目的数据库配置和操作方式 - **权限问题**: 参考 PHP 项目的权限控制方式 - **性能问题**: 参考 PHP 项目的性能优化方式 - **业务问题**: 参考 PHP 项目的业务实现方式 **原则:PHP 项目怎么解决,我们就怎么解决,保持 100% 一致** ### 3. 最佳实践 #### 最佳实践原则 **参考 PHP 项目的最佳实践,保持 100% 一致** - **代码组织**: 与 PHP 项目保持一致的代码组织方式 - **错误处理**: 与 PHP 项目保持一致的错误处理方式 - **测试策略**: 与 PHP 项目保持一致的测试策略 **原则:PHP 项目怎么组织代码,我们就怎么组织,保持 100% 一致** ## 📚 参考资源 ### 官方文档 - **NestJS**: https://nest.nodejs.cn/ - **TypeORM**: https://typeorm.io/ - **ThinkPHP**: https://doc.thinkphp.cn/ ### 项目相关 - **数据库结构**: 参考 PHP 项目的数据库设计 - **API 接口**: 参考 PHP 项目的接口文档 - **业务逻辑**: 参考 PHP 项目的业务实现 ## 🎯 总结 ### 平衡原则 1. **尊重 NestJS**: 充分利用 NestJS 的装饰器、依赖注入、管道等特性 2. **保持业务一致**: 业务逻辑、数据操作、接口设计与 PHP 项目 100% 一致 3. **框架适配**: 用 NestJS 的方式实现 PHP 项目的功能 ### 开发策略 - **看到 PHP 项目怎么做的,我们就怎么做** (业务层面) - **看到 NestJS 怎么做的,我们就怎么做** (框架层面) - **两者结合,发挥各自优势** ### 开发检查清单 ✅ **开发前检查** - [ ] 查看PHP模型字段定义 - [ ] 检查数据库表结构 - [ ] 确认字段类型和约束 - [ ] 了解业务逻辑关系 ✅ **开发中检查** - [ ] 字段名与数据库一致 - [ ] 时间戳使用int类型 - [ ] 软删除使用is_del字段 - [ ] 关联关系正确定义 - [ ] 查询语法使用TypeORM操作符 ✅ **开发后检查** - [ ] npm run build 无错误 - [ ] 与PHP项目字段名100%一致 - [ ] 业务逻辑与PHP保持一致 - [ ] 类型安全无警告 ### 🚀 简化处理步骤 #### 三步快速修复法 1. **看PHP** → 找到对应字段名和类型 2. **查数据库** → 确认实际字段结构 3. **写NestJS** → 使用框架特性实现相同逻辑 #### 优先级处理顺序 - **高优先级**:字段名不匹配(直接复用PHP) - **中优先级**:类型不匹配(遵守NestJS规范) - **低优先级**:语法优化(保持代码整洁) #### 一句话总结 **"用NestJS的语法,写PHP的逻辑,保持数据库的一致性"** --- ## 📋 执行检查清单(智能体开发规范) ### 开发前检查 - [ ] 对齐 PHP 模块/接口/字段 - [ ] 核对 DB 结构(表/字段/类型/索引) - [ ] 明确路由分端(/adminapi, /api)与守卫 ### 开发中检查 - [ ] 目录分层到位(Controller/Application/Core/Infrastructure/Entities/DTO) - [ ] 实体字段与 DB 一致;配置表仅用 `value(JSON)` - [ ] Controller 只路由+DTO 校验;不写业务/不碰 ORM - [ ] Application 负责编排与事务;Core 写规则;Infra 实现仓储与适配 - [ ] 管理端控制器接 `JwtAuthGuard + RolesGuard` - [ ] 启用必要 Pipes(JSON/Timestamp) - [ ] 用例完成发布事件;耗时逻辑入队 ### 开发后检查 - [ ] `npm run build` 通过(无类型警告) - [ ] 单测/集成/e2e 通过;关键路径有覆盖 - [ ] Swagger 注解完整 - [ ] 变更清单与迁移说明 ## 🔧 基础能力集成规范(Kafka / Redis / 队列 / 事务) ### 总览 - **目标**: 将事件、任务、缓存、事务能力以统一规范接入 App/Core/Infrastructure 三层,替代"散落式调用" - **约束**: 由 Application 发起流程;Core 编排业务规则且不直接依赖外设;Infrastructure 提供具体实现 ### 1. 事务(TypeORM) - **发起层**: Application(用例级事务边界) - **使用方式**: ```typescript // application/xxx.app.service.ts constructor(private readonly dataSource: DataSource, private readonly core: XxxCoreService) {} async runUseCase(dto: Dto) { return await this.dataSource.transaction(async (manager) => { // 将 manager 注入到仓储实现(通过请求域注入或方法透传) await this.core.handle(dto); // Core 内仅调用仓储接口 }); } ``` - **规范**: - 事务只在 Application 层开启;Core 不直接操作事务对象 - 多仓储参与时基于同一 `EntityManager` ### 2. 队列(Bull/BullMQ 或 DB 队列) - **发起层**: Application(用例结束后入队) - **接入点**: `UnifiedQueueService` 或具体 Provider(如 `BullQueueProvider`/`DatabaseQueueProvider`) ```typescript // application/xxx.app.service.ts constructor(private readonly queue: UnifiedQueueService) {} await this.queue.addJob('media', 'generateThumbnail', { attId }, { attempts: 3, delay: 0 }); ``` - **处理器建议放置**: `infrastructure/queues/xxx.processor.ts` 或独立消费模块 - **规范**: 入队数据为最小必要字段(ID/键);大对象存储DB再查 ### 3. 事件(Kafka / DB Outbox) - **发起层**: Application(领域事件在用例完成后发布) - **接入点**: `DomainEventService`(绑定 `IEventBus`,默认 DB Outbox,可切 Kafka) ```typescript // application/xxx.app.service.ts constructor(private readonly events: DomainEventService) {} await this.events.publishEvent( 'system.settings.storage.updated', String(siteId), String(siteId), { storageType } ); ``` ### 4. 缓存(Redis) - **短缓存**: 配置读取、上传限流/防刷(计数器) - **幂等**: SETNX+TTL - **使用方式**: 通过 `@InjectRedis()` 或 `CacheManager` ## 🗺️ 模块关系映射(PHP ↔ NestJS) ### 职责映射总览 | 职责 | PHP(ThinkPHP风格) | NestJS(规范分层) | 备注 | |---|---|---|---| | **控制器** | `app/admin/controller/*`、`app/api/controller/*` | `controllers/adminapi/*`、`controllers/api/*` | 仅路由与DTO校验(Nest特有:Guards/Pipes/Interceptors) | | **用例编排/流程** | `app/*/service/*`(可分 admin/api) | `application/*`(可分 `AdminXxxAppService`/`ApiXxxAppService`) | 事务、聚合领域规则、发事件/入队 | | **通用业务规则** | `core/*` 或被两端复用的 service | `core/services/*` | 不依赖外设(DDD) | | **仓储接口** | 与模型耦合在一起 | `domain/repositories/*` | 定义端口(接口) | | **仓储实现** | 模型(Model)直连DB | `infrastructure/repositories/*.typeorm.repository.ts` | TypeORM 实现,注入接口 | | **实体/模型** | `app/*/model/*` | `entities/*`(TypeORM 实体) | 字段与DB 100%一致 | | **外部适配** | SDK/Driver 封装 | `infrastructure/providers/*` 或 `vendor/*` | 存储/HTTP/SMS等 | | **配置中心** | `sys_config` + 配置文件 | `settings/*` 统一读写 `sys_config.value(JSON)` | 禁止 `config_value`、`app_type` | ### 目录映射(标准化) ``` your-module/ ├── your-module.module.ts # 模块定义(Nest特有) ├── controllers/ │ ├── adminapi/ # 后台控制器(/adminapi) │ └── api/ # 前台控制器(/api) ├── application/ # 用例编排(admin/api可分) ├── core/ │ ├── services/ # 通用规则/策略(≈ PHP core) │ ├── repositories/ # 仓储接口(端口) │ └── models|policies/ # 值对象/策略(可选) ├── infrastructure/ │ ├── repositories/ # TypeORM 实现 │ └── providers/ # 外部系统适配 ├── entities/ # TypeORM实体(DB一致) └── dto/ # DTO(class-validator) ``` ### 命名映射规则 - **应用层**: `XxxAppService`(如 `AdminUploadAppService` / `ApiUploadAppService`) - **Core层**: `XxxCoreService` - **仓储接口**: `XxxRepository` - **仓储实现**: `XxxTypeormRepository` - **控制器**: `XxxController`(位于 `controllers/adminapi|api`) - **配置键**: 常量化,如 `UPLOAD_CONFIG_KEY = 'upload'`,`STORAGE_LOCAL_KEY = 'storage_local'` ### 映射示例:Upload 模块 - **PHP 心智**: - admin/api 控制器 → 上传服务 → 模型写库(附件表) - **NestJS 对应**: - 控制器:`controllers/adminapi/upload.controller.ts`、`controllers/api/upload.controller.ts` - 应用:`application/upload.app.service.ts`(编排上传 → 领域校验 → Provider 落地 → 入库) - Core:`core/services/upload.core.service.ts`(类型/大小/命名/路径策略) - 仓储接口:`core/repositories/attachment.repository.ts` --- **注意**: 本文档是 AI 开发的重要参考,请严格按照平衡原则进行开发,既要尊重 NestJS 框架特性,又要与 PHP 项目业务逻辑保持一致。