Files
wwjcloud-nest-v1/.trae/rules/project_rules.md
wanwujie c4e588a2fe feat: 完成PHP到NestJS迁移工具和代码生成
-  成功运行迁移工具,生成28个模块的完整NestJS代码
-  生成所有实体、服务、控制器、验证器等组件
-  修复npm依赖冲突,更新package-lock.json
-  添加Docker测试脚本和配置文件
-  完善迁移工具的调试日志和错误处理
- 🔧 包含增量更新工具和质量检查工具
- 📊 迁移统计:28个模块,数千个文件,耗时26.47秒

主要变更:
- wwjcloud-nest/src/core/* - 生成的业务模块代码
- tools/* - 迁移工具和辅助脚本
- wwjcloud-nest/package.json - 依赖更新
- docker/* - 容器化配置和测试脚本
2025-10-20 18:43:52 +08:00

32 KiB
Raw Blame History

框架层面: 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. 🚫 禁止假设数据结构 - 所有数据结构必须基于 ./sql/wwjcloud.sql 真实表结构
  3. 🚫 禁止使用默认值 - 所有字段、方法、配置必须基于PHP项目真实值
  4. 🚫 禁止编写骨架代码 - 不允许生成空方法、TODO注释或占位符代码
  5. 🚫 禁止写死数据 - 不允许硬编码任何业务数据或配置
  6. 🚫 禁止猜测API接口 - 所有接口必须基于PHP控制器真实方法
  7. 🚫 禁止随意命名 - 所有命名必须遵循既定规范,不允许自由发挥
  8. 🚫 禁止跳过验证 - 每个生成的文件都必须经过严格验证

必须遵循的数据源

  • 数据库结构: ./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 使用指南

# 检查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. 代码命名规范

类名规范

  • 实体类: 使用 PascalCaseUser, OrderDetail
  • 服务类: 使用 PascalCase + ServiceUserService, OrderService
  • 控制器: 使用 PascalCase + ControllerUserController
  • DTO 类: 使用 PascalCase + DtoCreateUserDto, 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 工具检查文件命名规范:

# 检查所有模块的文件对应关系
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% 一致

📚 参考资源

官方文档

项目相关

  • 数据库结构: 参考 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
  • 启用必要 PipesJSON/Timestamp
  • 用例完成发布事件;耗时逻辑入队

开发后检查

  • npm run build 通过(无类型警告)
  • 单测/集成/e2e 通过;关键路径有覆盖
  • Swagger 注解完整
  • 变更清单与迁移说明

🔧 基础能力集成规范Kafka / Redis / 队列 / 事务)

总览

  • 目标: 将事件、任务、缓存、事务能力以统一规范接入 App/Core/Infrastructure 三层,替代"散落式调用"
  • 约束: 由 Application 发起流程Core 编排业务规则且不直接依赖外设Infrastructure 提供具体实现

1. 事务TypeORM

  • 发起层: Application用例级事务边界
  • 使用方式:
// 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 或具体 ProviderBullQueueProvider/DatabaseQueueProvider
// 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
// 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

职责映射总览

职责 PHPThinkPHP风格 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_valueapp_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/                                   # DTOclass-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.tscontrollers/api/upload.controller.ts
    • 应用:application/upload.app.service.ts(编排上传 → 领域校验 → Provider 落地 → 入库)
    • Corecore/services/upload.core.service.ts(类型/大小/命名/路径策略)
    • 仓储接口:core/repositories/attachment.repository.ts

注意: 本文档是 AI 开发的重要参考,请严格按照平衡原则进行开发,既要尊重 NestJS 框架特性,又要与 PHP 项目业务逻辑保持一致。