Files
wwjcloud/AI-DEVELOPMENT-GUIDE.md

385 lines
11 KiB
Markdown
Raw Normal View History

# WWJ Cloud AI 开发规范
> 本文档为AI开发WWJ Cloud项目时必须遵循的规范确保代码质量和架构一致性
## 🏗️ **架构分层规范**
### **微服务架构原则**
1. **按业务领域拆分**,不是按技术层级拆分
2. **每个微服务 = 一个完整的业务模块**
3. **服务内部保持分层架构**Controller/Service/Entity
4. **服务间通过接口通信**,避免直接依赖
### **微服务迁移路径**
- **阶段1**:模块化重构(当前)
- **阶段2**:服务边界定义
- **阶段3**:微服务拆分部署
### **目录结构规范**
```
wwjcloud/src/common/{module}/
├── entities/ # 实体层(数据模型)
│ ├── {Entity}.ts # 主实体
│ └── {SubEntity}.ts # 子实体
├── services/ # 服务层
│ ├── core/ # 核心业务逻辑(共用)
│ │ └── Core{Entity}Service.ts
│ ├── api/ # 前台API服务
│ │ └── {Entity}Service.ts
│ └── admin/ # 后台管理服务
│ └── {Entity}Service.ts
├── controllers/ # 控制器层
│ ├── api/ # 前台API控制器
│ │ └── {Entity}Controller.ts
│ └── admin/ # 后台管理控制器
│ └── {Entity}Controller.ts
├── dto/ # 数据传输对象
│ ├── api/ # 前台API DTO
│ │ ├── create-{entity}.dto.ts
│ │ └── update-{entity}.dto.ts
│ └── admin/ # 后台管理 DTO
│ ├── create-{entity}.dto.ts
│ └── update-{entity}.dto.ts
└── {module}.module.ts # 模块定义
```
### **命名规范**
```typescript
// 实体类PascalCase
export class Member {}
export class MemberLevel {}
// 服务类PascalCase + Service
export class CoreMemberService {}
export class MemberService {}
export class AdminMemberService {}
// 控制器类PascalCase + Controller
export class ApiMemberController {}
export class AdminMemberController {}
// 文件名kebab-case
// member.service.ts
// member.controller.ts
```
## 🛣️ **路由设计规范**
### **路由前缀规范**
```typescript
// 前台API路由
@Controller('api/member')
export class ApiMemberController {
// 前台用户访问的接口
}
// 后台管理路由
@Controller('admin/member')
export class AdminMemberController {
// 后台管理员访问的接口
}
```
### **API路径规范**
```typescript
// 前台API路径
GET /api/member/profile # 获取个人资料
PUT /api/member/profile # 更新个人资料
POST /api/member/sign # 会员签到
GET /api/member/orders # 获取订单列表
// 后台管理路径
GET /admin/member # 获取会员列表
POST /admin/member # 创建会员
GET /admin/member/:id # 获取会员详情
PUT /admin/member/:id # 更新会员
DELETE /admin/member/:id # 删除会员
```
## 📚 **OpenAPI 文档规范**
### **API分组规范**
```typescript
// 前台API文档
@ApiTags('前台-会员管理')
@Controller('api/member')
export class ApiMemberController {}
// 后台管理文档
@ApiTags('后台-会员管理')
@Controller('admin/member')
export class AdminMemberController {}
```
### **认证和权限规范**
#### **基础认证规范**
```typescript
// 前台用户认证
@UseGuards(JwtAuthGuard)
@ApiBearerAuth()
@Controller('api/member')
// 后台管理员认证
@UseGuards(JwtAuthGuard, AdminGuard)
@ApiBearerAuth()
@Controller('admin/member')
// 公开接口
@Public()
@Controller('api/member')
```
#### **RBAC权限控制规范**
##### **权限模型设计**
```
用户(User) → 角色(Role) → 权限(Permission) → 资源(Resource)
```
##### **权限控制层次**
1. **接口级权限**通过Guard控制API访问
2. **数据级权限**通过Service控制数据访问
3. **字段级权限**通过DTO控制字段显示
##### **权限装饰器规范**
```typescript
// 角色权限
@Roles('admin', 'manager')
@Controller('admin/member')
// 权限点
@Permissions('member:create', 'member:update')
@Post('member')
// 数据权限
@DataScope('site_id')
async getMemberList() {}
```
##### **权限验证流程**
```
请求到达 → 验证JWT → 检查角色 → 检查权限 → 访问资源
```
## 🔧 **服务层职责规范**
### **Core服务层核心业务逻辑**
```typescript
// 职责纯业务逻辑不涉及HTTP请求
export class CoreMemberService {
// 会员等级计算
calculateMemberLevel(points: number): MemberLevel {}
// 会员积分计算
calculateMemberPoints(actions: MemberAction[]): number {}
// 会员状态验证
validateMemberStatus(member: Member): boolean {}
}
```
### **API服务层前台API服务**
```typescript
// 职责:前台用户相关的业务逻辑
export class MemberService {
constructor(private coreService: CoreMemberService) {}
// 获取个人资料
async getProfile(memberId: number): Promise<MemberProfile> {}
// 更新个人资料
async updateProfile(memberId: number, data: UpdateProfileDto): Promise<MemberProfile> {}
// 会员签到
async signIn(memberId: number): Promise<SignResult> {}
}
```
### **Admin服务层后台管理服务**
```typescript
// 职责:后台管理相关的业务逻辑
export class AdminMemberService {
constructor(private coreService: CoreMemberService) {}
// 获取会员列表
async getMemberList(query: QueryMemberDto): Promise<PaginatedResult<Member>> {}
// 创建会员
async createMember(data: CreateMemberDto): Promise<Member> {}
// 更新会员
async updateMember(id: number, data: UpdateMemberDto): Promise<Member> {}
// 删除会员
async deleteMember(id: number): Promise<void> {}
}
```
## 🔗 **模块间依赖规范**
### **依赖注入原则**
1. **禁止循环依赖**A模块不能依赖B模块B模块也不能依赖A模块
2. **单向依赖**:只能从上层依赖下层,不能从下层依赖上层
3. **接口隔离**:通过接口定义模块间的契约
### **模块依赖关系**
```
Auth模块 ← Admin模块 ← RBAC模块
↓ ↓ ↓
Core模块 ← Common模块 ← 其他模块
```
### **共享服务规范**
- **Core服务**:可以被多个模块共享
- **Common服务**:提供通用功能(如工具类、常量等)
- **避免跨模块直接调用**:通过接口或事件通信
## 🔄 **数据流规范**
### **前台用户数据流**
```
前台用户 → API控制器 → API服务 → Core服务 → 数据库
```
### **后台管理数据流**
```
后台管理员 → Admin控制器 → Admin服务 → Core服务 → 数据库
```
### **数据隔离规范**
```typescript
// 前台用户只能访问自己的数据
async getProfile(memberId: number, currentMemberId: number): Promise<MemberProfile> {
if (memberId !== currentMemberId) {
throw new ForbiddenException('无权访问其他用户数据');
}
return this.memberRepository.findOne({ where: { memberId } });
}
// 后台管理员可以访问所有数据
async getMemberList(query: QueryMemberDto): Promise<PaginatedResult<Member>> {
return this.memberRepository.findAndCount({
where: query,
skip: (query.page - 1) * query.limit,
take: query.limit,
});
}
```
## ❌ **错误处理规范**
### **统一错误码**
```typescript
export enum ErrorCode {
// 通用错误
SUCCESS = 200,
BAD_REQUEST = 400,
UNAUTHORIZED = 401,
FORBIDDEN = 403,
NOT_FOUND = 404,
// 业务错误
MEMBER_NOT_FOUND = 1001,
MEMBER_ALREADY_EXISTS = 1002,
INSUFFICIENT_PERMISSIONS = 1003,
}
```
### **统一响应格式**
```typescript
export interface ApiResponse<T = any> {
code: number;
message: string;
data: T;
timestamp: string;
path: string;
}
```
## 🚀 **开发流程规范**
### **第一步:创建实体**
1. 根据数据库表结构创建实体类
2. 确保字段名与数据库一致
3. 添加必要的装饰器和验证
### **第二步创建Core服务**
1. 实现纯业务逻辑
2. 不涉及HTTP请求和响应
3. 可被其他服务复用
### **第三步创建API服务**
1. 实现前台用户相关逻辑
2. 调用Core服务
3. 处理前台特定的业务需求
4. **必须完整实现所有业务逻辑禁止TODO和Mock**
### **第四步创建Admin服务**
1. 实现后台管理相关逻辑
2. 调用Core服务
3. 处理后台管理需求
4. **必须完整实现所有业务逻辑禁止TODO和Mock**
### **第五步:创建控制器**
1. 实现HTTP接口
2. 调用对应的服务
3. 处理请求和响应
### **第六步:配置模块**
1. 导入所有依赖
2. 配置提供者和控制器
3. 导出必要的服务
### **第七步:代码审查**
1. 检查是否还有TODO标记
2. 检查是否还有Mock数据
3. 检查是否还有空实现
4. 确保所有业务逻辑完整
## 📋 **必须遵循的规则**
### **1. 数据库字段一致性**
- 所有实体字段名必须与 `sql/wwjcloud.sql` 中的表结构完全一致
- 使用 `@Column({ name: 'field_name' })` 确保字段映射正确
### **2. 多租户支持**
- 所有业务表必须包含 `site_id` 字段
- 独立版模式 `site_id = 0`
- SaaS模式 `site_id > 0`
### **3. 认证和权限**
- 前台API使用 `JwtAuthGuard`
- 后台API使用 `JwtAuthGuard + AdminGuard`
- 公开接口使用 `@Public()` 装饰器
### **4. 错误处理**
- 使用统一的错误码和响应格式
- 前台用户只能访问自己的数据
- 后台管理员可以访问所有数据
### **5. 代码质量**
- 遵循TypeScript严格模式
- 使用ESLint和Prettier规范
- 编写完整的JSDoc注释
- 实现单元测试
### **6. 业务逻辑完整性**
- **禁止TODO标记**:所有方法必须完整实现
- **禁止Mock数据**:必须使用真实数据库数据
- **禁止空实现**:所有方法必须包含完整业务逻辑
- **禁止硬编码**:配置值必须从配置文件读取
## ⚠️ **禁止事项**
1. **禁止硬编码**:所有配置值必须从配置文件或环境变量读取
2. **禁止Mock数据**:生产环境必须使用真实数据库,禁止返回硬编码的测试数据
3. **禁止TODO标记**所有业务逻辑必须完整实现不允许留下TODO注释
4. **禁止混合职责**:每个服务层必须职责单一
5. **禁止跳过验证**:所有输入必须进行验证
6. **禁止忽略错误**:必须正确处理所有异常情况
7. **禁止空实现**:所有方法必须包含完整的业务逻辑实现
---
**注意AI开发时必须严格遵循此规范确保代码质量和架构一致性**