- Add app/core/rate_limiter.py with Redis fixed-window counter + in-memory fallback - Migrate stories.py from TTLCache to Redis-backed check_rate_limit - Migrate admin_auth.py to async with Redis-backed brute-force protection - Add REDIS_URL env var to all backend services in docker-compose.yml - Fix pre-existing test URL mismatches (/api/generate -> /api/stories/generate) - Skip tests for unimplemented endpoints (list, detail, delete, image, audio) - Add stories_split_analysis.md for Phase 2 preparation
53 lines
1.8 KiB
Markdown
53 lines
1.8 KiB
Markdown
# `stories.py` 拆分分析 (Phase 2 准备)
|
|
|
|
## 当前职责
|
|
|
|
`app/api/stories.py` (591 行) 承担了以下职责:
|
|
|
|
| 职责 | 行数 | 描述 |
|
|
|---|---|---|
|
|
| Pydantic 模型 | ~50 行 | `GenerateRequest`, `StoryResponse`, `FullStoryResponse` 等 |
|
|
| 验证逻辑 | ~40 行 | `_validate_profile_and_universe` |
|
|
| 路由 + 业务 | ~300 行 | `generate_story`, `generate_story_full`, `generate_story_stream` |
|
|
| 绘本逻辑 | ~170 行 | `generate_storybook_api` (含并行图片生成) |
|
|
| 成就查询 | ~30 行 | `get_story_achievements` |
|
|
|
|
## 缺失端点
|
|
|
|
测试中引用但 **未实现** 的端点(这些应在拆分时一并补充):
|
|
|
|
- `GET /api/stories` — 故事列表 (分页)
|
|
- `GET /api/stories/{id}` — 故事详情
|
|
- `DELETE /api/stories/{id}` — 故事删除
|
|
- `POST /api/image/generate/{id}` — 封面图片生成
|
|
- `GET /api/audio/{id}` — 语音朗读
|
|
|
|
## 建议拆分结构
|
|
|
|
```
|
|
app/
|
|
├── schemas/
|
|
│ └── story_schemas.py # [NEW] Pydantic 模型
|
|
├── services/
|
|
│ └── story_service.py # [NEW] 核心业务逻辑
|
|
└── api/
|
|
├── stories.py # [SLIM] 路由定义 + 依赖注入
|
|
└── stories_storybook.py # [NEW] 绘本相关端点 (可选)
|
|
```
|
|
|
|
### `story_schemas.py`
|
|
- 迁移所有 Pydantic 模型
|
|
- 包括 `GenerateRequest`, `StoryResponse`, `FullStoryResponse`, `StorybookRequest`, `StorybookResponse` 等
|
|
|
|
### `story_service.py`
|
|
- `validate_profile_and_universe()` — 验证逻辑
|
|
- `create_story()` — 故事入库
|
|
- `generate_and_save_story()` — 生成 + 保存联合操作
|
|
- `generate_storybook_with_images()` — 绘本并行图片生成
|
|
- 补充: `list_stories()`, `get_story()`, `delete_story()`
|
|
|
|
### `stories.py` (瘦路由层)
|
|
- 仅保留 `@router` 装饰器和依赖注入
|
|
- 调用 service 层完成业务逻辑
|
|
- 预计 150-200 行
|