# Competition Management System - Agent Instructions 这是一个多租户的竞赛管理系统,采用 NestJS + Vue 3 技术栈。 ## 🚨 最重要的规则 ### 多租户数据隔离 **所有数据库查询必须包含 `tenantId` 条件!** 这是系统安全的核心。 ```typescript // ✅ 正确 const users = await prisma.user.findMany({ where: { tenantId, validState: 1 } }); // ❌ 错误 - 绝对不允许 const users = await prisma.user.findMany(); ``` ## 后端开发 ### 模块结构 - 使用 NestJS 标准模块结构:module、controller、service、dto - 所有数据操作通过 Prisma,禁止直接 SQL - 使用 `@Injectable()`、`@Controller()` 装饰器 ### 权限控制 - 使用 `@RequirePermission('module:action')` 装饰器 - 格式:`user:create`、`contest:update`、`role:delete` - 所有路由默认需要认证,公开接口使用 `@Public()` ### DTO 验证 ```typescript export class CreateUserDto { @IsString() username: string; @IsEmail() @IsOptional() email?: string; } ``` ### 错误处理 - 使用 NestJS 内置异常,消息用中文 - `NotFoundException`、`BadRequestException`、`ForbiddenException` ## 前端开发 ### 组件开发 - 使用 Vue 3 `