feat: 完善管理员系统和用户管理模块
- 更新管理员控制器和数据库管理功能 - 完善管理员操作日志系统 - 添加全面的属性测试覆盖 - 优化用户管理和用户档案服务 - 更新代码检查规范文档 功能改进: - 增强管理员权限验证 - 完善操作日志记录 - 优化数据库管理接口 - 提升系统安全性和可维护性
This commit is contained in:
125
AI代码检查规范_简洁版.md
125
AI代码检查规范_简洁版.md
@@ -1,20 +1,28 @@
|
||||
# AI代码检查规范(简洁版)
|
||||
# AI代码检查规范(简洁版)- Whale Town 游戏服务器专用
|
||||
|
||||
## 执行原则
|
||||
- **分步执行**:每次只执行一个步骤,完成后等待用户确认
|
||||
- **用户信息收集**:开始前必须收集用户当前日期和名称
|
||||
- **修改验证**:每次修改后必须重新检查该步骤
|
||||
- **项目特性适配**:针对NestJS游戏服务器的双模式架构和实时通信特点优化
|
||||
|
||||
## 检查步骤
|
||||
|
||||
### 步骤1:命名规范检查
|
||||
- **文件/文件夹**:snake_case(下划线分隔),严禁kebab-case
|
||||
- **文件/文件夹**:snake_case(下划线分隔),保持项目一致性
|
||||
- **变量/函数**:camelCase
|
||||
- **类/接口**:PascalCase
|
||||
- **常量**:SCREAMING_SNAKE_CASE
|
||||
- **路由**:kebab-case
|
||||
- **文件夹优化**:删除单文件文件夹,扁平化结构
|
||||
- **Core层命名**:业务支撑模块用_core后缀,通用工具模块不用
|
||||
- **游戏服务器特殊规范**:
|
||||
- WebSocket Gateway文件:`*.gateway.ts`
|
||||
- 实时通信相关:`websocket_*`, `realtime_*`
|
||||
- 双模式服务:`*_memory.service.ts`, `*_database.service.ts`
|
||||
- 属性测试:`*.property.spec.ts`
|
||||
- 集成测试:`*.integration.spec.ts`
|
||||
- E2E测试:`*.e2e.spec.ts`
|
||||
|
||||
#### 文件夹结构检查要求
|
||||
**必须使用listDirectory工具详细检查每个文件夹的内容:**
|
||||
@@ -31,10 +39,14 @@
|
||||
- **测试文件位置**:测试文件必须与对应源文件放在同一目录,不允许单独的tests文件夹
|
||||
|
||||
**测试文件位置规范(重要):**
|
||||
- ✅ 正确:`src/business/admin/admin.service.ts` 和 `src/business/admin/admin.service.spec.ts` 同目录
|
||||
- ❌ 错误:`src/business/admin/tests/admin.service.spec.ts` 单独tests文件夹
|
||||
- **强制要求**:所有tests/、test/等测试专用文件夹必须扁平化,测试文件移动到源文件同目录
|
||||
- **扁平化处理**:包括tests/、test/、spec/、__tests__/等所有测试文件夹都必须扁平化
|
||||
- ✅ **正确位置**:测试文件必须与对应源文件放在同一目录
|
||||
- ❌ **错误位置**:测试文件放在单独的tests/、test/、spec/、__tests__/等文件夹中
|
||||
- **游戏服务器测试分类**:
|
||||
- 单元测试:`*.spec.ts` - 基础功能测试
|
||||
- 集成测试:`*.integration.spec.ts` - 模块间交互测试
|
||||
- 属性测试:`*.property.spec.ts` - 基于属性的随机测试(适用于管理员模块)
|
||||
- E2E测试:`*.e2e.spec.ts` - 端到端业务流程测试
|
||||
- 性能测试:`*.perf.spec.ts` - WebSocket和实时通信性能测试
|
||||
|
||||
**常见错误:**
|
||||
- 只看文件夹名称,不检查内容
|
||||
@@ -61,6 +73,7 @@
|
||||
- **代码重复**:识别并消除重复代码
|
||||
- **魔法数字**:提取为常量定义
|
||||
- **工具函数**:抽象重复逻辑为可复用函数
|
||||
- **TODO项处理**:最终文件不能包含TODO项,必须真正实现功能或删除未完成代码
|
||||
|
||||
### 步骤4:架构分层检查
|
||||
- **检查范围**:仅检查当前执行检查的文件夹,不考虑其他同层功能模块
|
||||
@@ -74,36 +87,51 @@
|
||||
- **职责分离**:确保各层职责清晰,边界明确
|
||||
|
||||
### 步骤5:测试覆盖检查
|
||||
- **测试文件存在性**:每个Service必须有.spec.ts文件
|
||||
- **Service定义**:只有以下类型需要测试文件
|
||||
- **测试文件存在性**:每个Service、Controller、Gateway必须有对应测试文件
|
||||
- **游戏服务器测试要求**:
|
||||
- ✅ **Service类**:文件名包含`.service.ts`的业务逻辑类
|
||||
- ✅ **Controller类**:文件名包含`.controller.ts`的控制器类
|
||||
- ✅ **Gateway类**:文件名包含`.gateway.ts`的WebSocket网关类
|
||||
- ❌ **Middleware类**:中间件不需要测试文件
|
||||
- ❌ **Guard类**:守卫不需要测试文件
|
||||
- ✅ **Guard类**:文件名包含`.guard.ts`的守卫类(游戏服务器安全重要)
|
||||
- ✅ **Interceptor类**:文件名包含`.interceptor.ts`的拦截器类(日志监控重要)
|
||||
- ✅ **Middleware类**:文件名包含`.middleware.ts`的中间件类(性能监控重要)
|
||||
- ❌ **DTO类**:数据传输对象不需要测试文件
|
||||
- ❌ **Interface文件**:接口定义不需要测试文件
|
||||
- ❌ **Utils工具类**:工具函数不需要测试文件
|
||||
- **方法覆盖**:所有公共方法必须有测试
|
||||
- **场景覆盖**:正常、异常、边界情况
|
||||
- **测试质量**:真实有效的测试用例,不是空壳
|
||||
- **集成测试**:复杂Service需要.integration.spec.ts
|
||||
- ❌ **Utils工具类**:简单工具函数不需要测试文件(复杂工具类需要)
|
||||
- **实时通信测试**:WebSocket Gateway必须有连接、断开、消息处理的完整测试
|
||||
- **双模式测试**:内存服务和数据库服务都需要完整测试覆盖
|
||||
- **属性测试应用**:管理员模块使用fast-check进行属性测试
|
||||
- **集成测试要求**:复杂Service需要.integration.spec.ts
|
||||
- **E2E测试要求**:关键业务流程需要端到端测试
|
||||
- **测试执行**:必须执行测试命令验证通过
|
||||
|
||||
### 步骤6:功能文档生成
|
||||
- **README结构**:模块概述、对外接口、内部依赖、核心特性、潜在风险
|
||||
- **接口描述**:每个公共方法一句话功能说明
|
||||
- **API接口列表**:如果business模块开放了可访问的API,在README中列出每个API并用一句话解释功能
|
||||
- **WebSocket接口文档**:Gateway模块需要详细的WebSocket事件文档
|
||||
- **双模式说明**:Core层模块需要说明数据库模式和内存模式的差异
|
||||
- **依赖分析**:列出所有项目内部依赖及用途
|
||||
- **特性识别**:技术特性、功能特性、质量特性
|
||||
- **风险评估**:技术风险、业务风险、运维风险、安全风险
|
||||
- **游戏服务器特殊文档**:
|
||||
- 实时通信协议说明
|
||||
- 性能监控指标
|
||||
- 双模式切换指南
|
||||
- 属性测试策略说明
|
||||
|
||||
## 关键规则
|
||||
|
||||
### 命名规范
|
||||
```typescript
|
||||
// 文件命名
|
||||
✅ user_service.ts, create_user_dto.ts
|
||||
❌ user-service.ts, UserService.ts
|
||||
// 文件命名(保持项目一致性)
|
||||
✅ user_service.ts, create_user_dto.ts, admin_operation_log_service.ts
|
||||
❌ user-service.ts, UserService.ts, adminOperationLog.service.ts
|
||||
|
||||
// 游戏服务器特殊文件类型
|
||||
✅ location_broadcast.gateway.ts, websocket_auth.guard.ts
|
||||
✅ users_memory.service.ts, file_redis.service.ts
|
||||
✅ admin.property.spec.ts, zulip_integration.e2e.spec.ts
|
||||
|
||||
// 变量命名
|
||||
✅ const userName = 'test';
|
||||
@@ -178,13 +206,61 @@ export class LocationBroadcastService {
|
||||
|
||||
### 测试覆盖
|
||||
```typescript
|
||||
describe('UserService', () => {
|
||||
describe('createUser', () => {
|
||||
it('should create user successfully', () => {}); // 正常情况
|
||||
it('should throw error when email exists', () => {}); // 异常情况
|
||||
it('should handle empty name', () => {}); // 边界情况
|
||||
// 游戏服务器测试示例
|
||||
describe('LocationBroadcastGateway', () => {
|
||||
describe('handleConnection', () => {
|
||||
it('should accept valid WebSocket connection', () => {}); // 正常情况
|
||||
it('should reject unauthorized connection', () => {}); // 异常情况
|
||||
it('should handle connection limit exceeded', () => {}); // 边界情况
|
||||
});
|
||||
|
||||
describe('handlePositionUpdate', () => {
|
||||
it('should broadcast position to room members', () => {}); // 实时通信测试
|
||||
it('should validate position data format', () => {}); // 数据验证测试
|
||||
});
|
||||
});
|
||||
|
||||
// 双模式服务测试
|
||||
describe('UsersService vs UsersMemoryService', () => {
|
||||
it('should have identical behavior in both modes', () => {}); // 一致性测试
|
||||
});
|
||||
|
||||
// 属性测试示例(管理员模块)
|
||||
describe('AdminService Properties', () => {
|
||||
it('should handle any valid user status update',
|
||||
fc.property(fc.integer(), fc.constantFrom(...Object.values(UserStatus)),
|
||||
(userId, status) => {
|
||||
// 属性测试逻辑
|
||||
})
|
||||
);
|
||||
});
|
||||
```
|
||||
|
||||
### API文档规范
|
||||
**business模块如开放API接口,README中必须包含:**
|
||||
|
||||
```markdown
|
||||
## 对外API接口
|
||||
|
||||
### POST /api/auth/login
|
||||
用户登录接口,支持用户名/邮箱/手机号多种方式登录。
|
||||
|
||||
### GET /api/users/profile
|
||||
获取当前登录用户的详细档案信息。
|
||||
|
||||
### PUT /api/users/:id/status
|
||||
更新指定用户的状态(激活/禁用/待验证)。
|
||||
|
||||
## WebSocket事件接口
|
||||
|
||||
### 'position_update'
|
||||
接收客户端位置更新,广播给房间内其他用户。
|
||||
|
||||
### 'join_room'
|
||||
用户加入游戏房间,建立实时通信连接。
|
||||
|
||||
### 'chat_message'
|
||||
处理聊天消息,支持Zulip集成和消息过滤。
|
||||
```
|
||||
|
||||
## 执行模板
|
||||
@@ -224,4 +300,5 @@ describe('UserService', () => {
|
||||
- **测试执行**:步骤5必须执行实际测试命令
|
||||
- **日期使用**:所有日期字段使用用户提供的真实日期
|
||||
- **作者字段保护**:@author字段中的人名不得修改,只有AI标识才可替换
|
||||
- **修改记录强制**:每次修改文件必须添加修改记录和更新@lastModified
|
||||
- **修改记录强制**:每次修改文件必须添加修改记录和更新@lastModified
|
||||
- **API文档强制**:business模块如开放API接口,README中必须列出所有API并用一句话解释功能
|
||||
Reference in New Issue
Block a user