Your Name 8eb8100cf4 fix: P0 安全加固 + 前端错误边界 + ESLint 修复
后端:
- 实现登出 API(清除 refresh token)
- 清除 videos.py 中已被 Celery 任务取代的死代码
- 添加速率限制中间件(60次/分钟,登录10次/分钟)
- 添加 SECRET_KEY/ENCRYPTION_KEY 默认值警告
- OSS STS 方法回退到 Policy 签名(不再抛异常)

前端:
- 添加全局 404/error/loading 页面
- 添加三端 error.tsx + loading.tsx 错误边界
- 修复 useId 条件调用违反 Hooks 规则
- 修复未转义引号和 Image 命名冲突
- 添加 ESLint 配置

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 17:18:04 +08:00

138 lines
5.1 KiB
Markdown
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.

# CLAUDE.md — 秒思智能审核平台
## 常用命令
### 前端 (frontend/)
```bash
cd frontend && npm run dev # 开发服务器 http://localhost:3000
cd frontend && npm run build # 生产构建(含类型检查)
cd frontend && npm run lint # ESLint 检查
cd frontend && npm test # Vitest 测试
cd frontend && npm run test:coverage # 覆盖率报告
```
### 后端 (backend/)
```bash
cd backend && uvicorn app.main:app --reload # 开发服务器 http://localhost:8000
cd backend && pytest # 运行测试
cd backend && pytest --cov # 带覆盖率
cd backend && pytest -m "not slow" # 跳过慢测试
cd backend && alembic upgrade head # 执行数据库迁移
cd backend && alembic revision --autogenerate -m "msg" # 生成迁移
```
### Docker
```bash
cd backend && docker-compose up # 启动 PostgreSQL + Redis + API + Celery
```
## 项目架构
**秒思智能审核平台** — AI 营销内容合规审核系统,支持品牌方/代理商/达人三端。
```
video-compliance-ai/
├── frontend/ Next.js 14 + TypeScript + TailwindCSS (App Router)
├── backend/ FastAPI + SQLAlchemy 2.0 (async) + PostgreSQL
├── documents/ 产品文档 (PRD, 设计稿, 约定等)
└── scripts/ 工具脚本
```
### 前端结构
```
frontend/
├── app/
│ ├── login/, register/ 认证页面
│ ├── creator/ 达人端(任务/上传/申诉)
│ ├── agency/ 代理商端(审核/管理/报表)
│ └── brand/ 品牌方端(项目/规则/AI配置
├── components/ui/ 通用 UI 组件
├── lib/api.ts Axios API 客户端(所有后端接口已封装)
├── lib/taskStageMapper.ts 任务阶段 → UI 状态映射
├── hooks/ 自定义 HooksuseOSSUpload 等)
├── contexts/ AuthContext, SSEContext
└── types/ TypeScript 类型定义(与后端 schema 对齐)
```
### 后端结构
```
backend/app/
├── main.py FastAPI 应用入口API 前缀 /api/v1
├── config.py Pydantic Settings 配置
├── database.py SQLAlchemy async session
├── celery_app.py Celery 配置
├── api/ 路由auth, tasks, projects, briefs, organizations, dashboard, sse, upload, scripts, videos, rules, ai_config
├── models/ SQLAlchemy ORM 模型
├── schemas/ Pydantic 请求/响应 schema
├── services/ 业务逻辑层
├── tasks/ Celery 异步任务
└── utils/ 工具函数
```
## 关键约定
### 认证与多租户
- JWT 双 Tokenaccess 15min + refresh 7天
- localStorage keys`miaosi_access_token`, `miaosi_refresh_token`, `miaosi_user`
- 品牌方 = 租户,数据按品牌方隔离
- 组织关系多对多:品牌方 ↔ 代理商 ↔ 达人
### ID 规范
- 语义化前缀 + 6位数字`BR`(品牌方), `AG`(代理商), `CR`(达人), `PJ`(项目), `TK`(任务), `BF`(Brief)
### Mock 模式
- `USE_MOCK` 标志从 `contexts/AuthContext.tsx` 导出
- 开发环境或 `NEXT_PUBLIC_USE_MOCK=true` 时为 true
- 每个页面在 `loadData()` 中先检查 `USE_MOCK`,为 true 则使用本地 mock 数据
### 前端数据加载模式
```typescript
const loadData = useCallback(async () => {
if (USE_MOCK) { setData(mockData); setLoading(false); return }
try {
const res = await api.someMethod()
setData(res)
} catch (err) {
toast.error('加载失败')
} finally {
setLoading(false)
}
}, [toast])
useEffect(() => { loadData() }, [loadData])
```
### AI 服务
- 通过中转服务商OneAPI/OneInAll调用不直连 AI 厂商
- 配置项:`AI_PROVIDER`, `AI_API_KEY`, `AI_API_BASE_URL`
### 文件上传
- 阿里云 OSS 直传,前端通过 `useOSSUpload` hook 处理
- 流程:`api.getUploadPolicy()` → POST 到 OSS → `api.fileUploaded()` 回调
### 实时推送
- SSE (Server-Sent Events),端点 `/api/v1/sse/events`
- 前端通过 `SSEContext` 提供 `subscribe(eventType, handler)` API
## 设计系统
### 暗色主题配色
- 背景:`bg-page`(#0B0B0E), `bg-card`(#16161A), `bg-elevated`(#1A1A1E)
- 文字:`text-primary`(#FAFAF9), `text-secondary`(#6B6B70), `text-tertiary`(#4A4A50)
- 强调色:`accent-indigo`(#6366F1), `accent-green`(#32D583), `accent-coral`(#E85A4F), `accent-amber`(#FFB547)
- 边框:`border-subtle`(#2A2A2E), `border-strong`(#3A3A40)
### 字体
- 正文DM Sans
- 展示Fraunces
## 任务审核流程
```
脚本上传 → AI审核 → 代理商审核 → 品牌终审 → 视频上传 → AI审核 → 代理商审核 → 品牌终审 → 完成
```
对应 `TaskStage``script_upload``script_ai_review``script_agency_review``script_brand_review``video_upload` → ... → `completed`
## 注意事项
- 后端 Celery 异步任务(视频审核处理)尚未完整实现
- 数据库已有 3 个 Alembic 迁移版本
- `.pen` 文件是加密设计文件,只能通过 Pencil MCP 工具访问