library-picturebook-activity/backend/.cursor/rules/backend-specific.mdc
aid 418aa57ea8 Day4: 超管端设计优化 + UGC绘本创作社区P0实现
一、超管端设计优化
- 文档管理SOP体系建立,docs目录重组
- 统一用户管理:跨租户全局视角,合并用户管理+公众用户
- 活动监管全模块重构:全部活动(统计卡片+阶段筛选+SuperDetail详情页)、报名数据/作品数据/评审进度(两层合一扁平列表)、成果发布(去Tab+统计+隐藏写操作)
- 菜单精简:移除评委管理/评审规则/通知管理
- Bug修复:租户编辑丢失隐藏菜单、pageSize限制、主色统一

二、UGC绘本创作社区P0
- 数据库:10张新表(user_works/user_work_pages/work_tags等)
- 子女账号独立化:Child升级为独立User,家长切换+独立登录
- 用户作品库:CRUD+发布审核,8个API
- AI创作流程:提交→生成→保存到作品库,4个API
- 作品广场:首页改造为推荐流,标签+搜索+排序
- 内容审核(超管端):作品审核+作品管理+标签管理
- 活动联动:WorkSelector作品选择器
- 布局改造:底部5Tab(发现/创作/活动/作品库/我的)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 22:20:25 +08:00

123 lines
2.5 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
description: 后端特定的开发规范(仅作用于 backend 目录)
globs:
alwaysApply: true
---
# 后端特定规范
本规则仅作用于 `backend/` 目录。
## NestJS 最佳实践
### 依赖注入
始终使用构造函数注入:
```typescript
@Injectable()
export class MyService {
constructor(
private readonly prisma: PrismaService,
private readonly otherService: OtherService,
) {}
}
```
### 全局模块
PrismaModule 已设为全局模块,无需在每个模块中导入。
### 环境变量
使用 `@nestjs/config` 的 ConfigService
```typescript
constructor(private configService: ConfigService) {
const jwtSecret = this.configService.get<string>('JWT_SECRET');
}
```
## 测试规范
### 单元测试
```typescript
describe('UsersService', () => {
let service: UsersService;
let prisma: PrismaService;
beforeEach(async () => {
const module = await Test.createTestingModule({
providers: [
UsersService,
{
provide: PrismaService,
useValue: mockPrismaService,
},
],
}).compile();
service = module.get<UsersService>(UsersService);
prisma = module.get<PrismaService>(PrismaService);
});
it('should create a user', async () => {
const dto = { username: 'test', password: 'pass123' };
const result = await service.create(dto, 1);
expect(result).toBeDefined();
});
});
```
## 日志记录
使用 NestJS Logger
```typescript
import { Logger } from '@nestjs/common';
export class MyService {
private readonly logger = new Logger(MyService.name);
async someMethod() {
this.logger.log('执行某操作');
this.logger.warn('警告信息');
this.logger.error('错误信息', error.stack);
}
}
```
## 常用脚本
```bash
# 开发
pnpm start:dev
# 数据库迁移
pnpm prisma:migrate:dev
# 初始化管理员
pnpm init:admin
# 初始化菜单
pnpm init:menus
```
## 项目结构
```
src/
├── auth/ # 认证模块
├── users/ # 用户管理
├── roles/ # 角色管理
├── permissions/ # 权限管理
├── menus/ # 菜单管理
├── tenants/ # 租户管理
├── school/ # 学校管理
├── contests/ # 竞赛管理
├── common/ # 公共模块
├── prisma/ # Prisma 服务
└── main.ts # 入口文件
```