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

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

影响:

  • 删除 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()

删除的导入:

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. 删除测试文件

删除的文件:

  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 等表)

测试验证

单元测试

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 调用(需要在前端修改):

  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 的后续阶段:

Phase 3: 数据库迁移

  • 创建 Alembic 迁移文件
  • 删除 storyboard_resources
  • 提供回滚脚本

Phase 4: 代码清理

  • 重命名 _sync_storyboard_resources() 方法
  • 清理残留引用
  • 更新文档

Phase 5: 前端适配

  • 修改 API 服务层
  • 修改类型定义
  • 修改 UI 组件
  • 修改 Hooks
  • 更新 Mock 数据

参考