You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
5.6 KiB
5.6 KiB
Phase 2: 删除废弃的 storyboard_resources 相关代码
日期: 2026-02-10
类型: 重构
影响范围: Service, API, Schema, Model, Tests
背景
根据 ADR 04: 移除废弃的 storyboard_resources 表,在 Phase 1 修复 AI Conversation 功能后,现在删除所有废弃的代码。
变更内容
1. 删除 Service 层
删除文件: server/app/services/storyboard_project_resource_service.py
影响:
- 删除
StoryboardResourceService类 - 删除以下方法:
add_resource_to_storyboard()remove_resource_from_storyboard()get_storyboard_resources()get_resource_storyboards()batch_add_resources()batch_remove_resources()
2. 删除 Schema
删除文件: server/app/schemas/storyboard_project_resource.py
影响:
- 删除
StoryboardResourceResponseSchema - 删除
BatchResourceRequestSchema - 删除
BatchResourceResponseSchema
3. 删除 API 端点
文件: server/app/api/v1/project_resources.py
删除的端点:
POST /storyboards/{storyboard_id}/resources/batch- 批量添加素材到分镜DELETE /storyboards/{storyboard_id}/resources/batch- 批量从分镜移除素材POST /storyboards/{storyboard_id}/resources/{resource_id}- 添加素材到分镜DELETE /storyboards/{storyboard_id}/resources/{resource_id}- 从分镜移除素材GET /storyboards/{storyboard_id}/resources- 获取分镜的所有素材GET /resources/{resource_id}/storyboards- 获取素材关联的分镜
删除的依赖注入函数:
get_storyboard_resource_service()
删除的导入:
from app.services.storyboard_project_resource_service import StoryboardResourceService
from app.schemas.storyboard_project_resource import (
StoryboardResourceResponse,
BatchResourceRequest,
BatchResourceResponse
)
4. 删除模型
文件: server/app/models/project_resource.py
删除的类:
StoryboardResource- 分镜素材关联模型
模型定义:
class StoryboardResource(SQLModel, table=True):
"""分镜素材关联模型"""
__tablename__ = "storyboard_resources"
storyboard_resource_id: UUID
storyboard_id: UUID
project_resource_id: UUID
resource_type: int
display_order: int
created_at: datetime
5. 删除测试文件
删除的文件:
server/tests/integration/test_storyboard_project_resource_api.py- API 集成测试server/tests/unit/services/test_storyboard_project_resource_service.py- Service 单元测试
修改的文件: server/tests/conftest.py
删除的 fixtures:
test_storyboard_resource- 单个分镜素材关联 fixturetest_storyboard_resources- 多个分镜素材关联 fixture
代码统计
删除的代码量
| 类型 | 文件数 | 代码行数(估算) |
|---|---|---|
| Service | 1 | ~200 行 |
| Schema | 1 | ~50 行 |
| API 端点 | 6 个端点 | ~300 行 |
| Model | 1 个类 | ~20 行 |
| 测试 | 2 个文件 + 2 个 fixtures | ~500 行 |
| 总计 | 5 个文件 | ~1070 行 |
保留的代码
| 模块 | 说明 |
|---|---|
StoryboardResourceRepository |
保留,用于 AI Conversation 功能 |
StoryboardResourceService |
保留,用于分镜资源管理(图片、视频、对白、配音) |
storyboard_resources API 路由 |
保留,用于分镜资源管理 |
注意: 保留的代码与废弃的代码同名但功能不同:
- 废弃的:管理分镜与项目素材的关联(
storyboard_resources表) - 保留的:管理分镜生成的资源(
storyboard_images,storyboard_videos等表)
测试验证
单元测试
docker exec jointo-server-app pytest tests/unit/services/test_ai_conversation_service.py -v
结果: ✅ 全部通过(19 个测试)
代码检查
# 检查是否有残留的导入
grep -r "StoryboardResource" server/app/ --include="*.py"
grep -r "storyboard_project_resource" server/app/ --include="*.py"
结果: ✅ 无残留引用(除了注释和文档)
影响分析
后端影响
- ✅ AI Conversation Service 正常工作
- ✅ Storyboard Service 正常工作(使用
storyboard_items) - ✅ 所有单元测试通过
- ⚠️ 6 个废弃的 API 端点已删除(前端需要适配)
前端影响
受影响的 API 调用(需要在前端修改):
POST /api/v1/storyboards/{id}/resources/batchDELETE /api/v1/storyboards/{id}/resources/batchPOST /api/v1/storyboards/{id}/resources/{resourceId}DELETE /api/v1/storyboards/{id}/resources/{resourceId}GET /api/v1/storyboards/{id}/resourcesGET /api/v1/resources/{id}/storyboards
替代方案:
- 使用
storyboard_itemsAPI 管理分镜元素关联 - 参考
server/app/api/v1/storyboards.py中的端点
下一步
继续执行 ADR 04 的后续阶段:
Phase 3: 数据库迁移
- 创建 Alembic 迁移文件
- 删除
storyboard_resources表 - 提供回滚脚本
Phase 4: 代码清理
- 重命名
_sync_storyboard_resources()方法 - 清理残留引用
- 更新文档
Phase 5: 前端适配
- 修改 API 服务层
- 修改类型定义
- 修改 UI 组件
- 修改 Hooks
- 更新 Mock 数据