# Phase 2: 删除废弃的 storyboard_resources 相关代码 **日期**: 2026-02-10 **类型**: 重构 **影响范围**: Service, API, Schema, Model, Tests ## 背景 根据 [ADR 04: 移除废弃的 storyboard_resources 表](../adrs/04-remove-storyboard-resources-table.md),在 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` **影响**: - 删除 `StoryboardResourceResponse` Schema - 删除 `BatchResourceRequest` Schema - 删除 `BatchResourceResponse` Schema ### 3. 删除 API 端点 **文件**: `server/app/api/v1/project_resources.py` **删除的端点**: 1. `POST /storyboards/{storyboard_id}/resources/batch` - 批量添加素材到分镜 2. `DELETE /storyboards/{storyboard_id}/resources/batch` - 批量从分镜移除素材 3. `POST /storyboards/{storyboard_id}/resources/{resource_id}` - 添加素材到分镜 4. `DELETE /storyboards/{storyboard_id}/resources/{resource_id}` - 从分镜移除素材 5. `GET /storyboards/{storyboard_id}/resources` - 获取分镜的所有素材 6. `GET /resources/{resource_id}/storyboards` - 获取素材关联的分镜 **删除的依赖注入函数**: - `get_storyboard_resource_service()` **删除的导入**: ```python 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` - 分镜素材关联模型 **模型定义**: ```python 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. 删除测试文件 **删除的文件**: 1. `server/tests/integration/test_storyboard_project_resource_api.py` - API 集成测试 2. `server/tests/unit/services/test_storyboard_project_resource_service.py` - Service 单元测试 **修改的文件**: `server/tests/conftest.py` **删除的 fixtures**: - `test_storyboard_resource` - 单个分镜素材关联 fixture - `test_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` 等表) ## 测试验证 ### 单元测试 ```bash docker exec jointo-server-app pytest tests/unit/services/test_ai_conversation_service.py -v ``` **结果**: ✅ 全部通过(19 个测试) ### 代码检查 ```bash # 检查是否有残留的导入 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 调用**(需要在前端修改): 1. `POST /api/v1/storyboards/{id}/resources/batch` 2. `DELETE /api/v1/storyboards/{id}/resources/batch` 3. `POST /api/v1/storyboards/{id}/resources/{resourceId}` 4. `DELETE /api/v1/storyboards/{id}/resources/{resourceId}` 5. `GET /api/v1/storyboards/{id}/resources` 6. `GET /api/v1/resources/{id}/storyboards` **替代方案**: - 使用 `storyboard_items` API 管理分镜元素关联 - 参考 `server/app/api/v1/storyboards.py` 中的端点 ## 下一步 继续执行 [ADR 04](../adrs/04-remove-storyboard-resources-table.md) 的后续阶段: ### Phase 3: 数据库迁移 - 创建 Alembic 迁移文件 - 删除 `storyboard_resources` 表 - 提供回滚脚本 ### Phase 4: 代码清理 - 重命名 `_sync_storyboard_resources()` 方法 - 清理残留引用 - 更新文档 ### Phase 5: 前端适配 - 修改 API 服务层 - 修改类型定义 - 修改 UI 组件 - 修改 Hooks - 更新 Mock 数据 ## 参考 - [ADR 04: 移除废弃的 storyboard_resources 表](../adrs/04-remove-storyboard-resources-table.md) - [Phase 1 Changelog](./2026-02-10-remove-storyboard-resources-table-phase1.md) - [Storyboard Service 需求文档](../requirements/backend/04-services/project/storyboard-service.md)