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.0 KiB
5.0 KiB
Changelog: 移除 storyboard_plans 功能
日期: 2026-02-12
类型: Breaking Change
影响范围: 后端 API、数据库结构
变更概述
完全移除 storyboard_plans 表及相关功能,包括:
- 删除
storyboard_plans表 - 移除
storyboards.default_plan_id字段 - 移除
storyboard_images.plan_id和storyboard_videos.plan_id字段 - 删除所有相关的 API、Service、Repository、Schema、Model 代码
- 删除所有相关的单元测试和集成测试
变更原因
经过架构评审,决定废除分镜方案(storyboard_plans)功能,原因如下:
- 业务需求变更:产品方向调整,不再需要多方案管理功能
- 简化架构:减少不必要的复杂度,提升系统可维护性
- 性能优化:减少关联查询和数据冗余
数据库变更
迁移文件
server/alembic/versions/20260212_1800_remove_storyboard_plans.py
变更内容
1. 删除表
storyboard_plans- 分镜方案表
2. 删除字段
storyboards.default_plan_id- 默认方案IDstoryboard_images.plan_id- 所属方案IDstoryboard_videos.plan_id- 所属方案ID
3. 删除索引
idx_storyboards_default_planidx_storyboard_images_planidx_storyboard_videos_planidx_storyboard_plans_storyboardidx_storyboard_plans_typeidx_storyboard_plans_storyboard_order
4. 删除触发器
update_storyboard_plans_updated_at
代码变更
删除的文件
Model 层
server/app/models/storyboard_plan.py
Schema 层
server/app/schemas/storyboard_plan.py
Repository 层
server/app/repositories/storyboard_plan_repository.py
Service 层
server/app/services/storyboard_plan_service.py
API 层
server/app/api/v1/storyboard_plans.py
测试文件
server/tests/unit/repositories/test_storyboard_plan_repository.pyserver/tests/integration/test_storyboard_plans_api.py
修改的文件
Model 层
server/app/models/__init__.py- 移除 StoryboardPlan 和 PlanType 导入server/app/models/storyboard.py- 移除 default_plan_id 字段server/app/models/storyboard_resource.py- 移除 plan_id 字段
API 层
server/app/api/v1/__init__.py- 移除 storyboard_plans 路由注册
API 变更
删除的端点
所有 /storyboards/{storyboard_id}/plans 相关端点已删除:
POST /storyboards/{storyboard_id}/plans- 创建分镜方案GET /storyboards/{storyboard_id}/plans- 获取分镜的所有方案PATCH /storyboards/{storyboard_id}/plans/{plan_id}- 更新分镜方案DELETE /storyboards/{storyboard_id}/plans/{plan_id}- 删除分镜方案POST /storyboards/{storyboard_id}/default-plan- 设置默认方案
影响的响应结构
Storyboard 响应
移除字段:
defaultPlanId- 默认方案ID
StoryboardImage / StoryboardVideo 响应
移除字段:
planId- 所属方案ID
迁移指南
数据库迁移
# 在 Docker 容器内执行迁移
docker exec jointo-server-app alembic upgrade head
前端适配
如果前端代码使用了以下功能,需要移除:
-
方案管理相关 API 调用
// 需要删除的代码 await api.post(`/storyboards/${id}/plans`, data); await api.get(`/storyboards/${id}/plans`); await api.patch(`/storyboards/${id}/plans/${planId}`, data); await api.delete(`/storyboards/${id}/plans/${planId}`); -
响应数据中的方案字段
// 需要移除的字段引用 storyboard.defaultPlanId image.planId video.planId -
方案相关的 UI 组件
- 方案选择器
- 方案列表
- 方案创建/编辑表单
回滚方案
如需回滚,执行:
# 在 Docker 容器内执行回滚
docker exec jointo-server-app alembic downgrade -1
注意:回滚会恢复表结构,但不会恢复已删除的数据。
相关文档
- ADR 05: 分镜方案表设计 - 已标记为废弃
- 迁移脚本
测试验证
数据库验证
-- 验证表已删除
SELECT tablename FROM pg_tables WHERE tablename = 'storyboard_plans';
-- 应返回空结果
-- 验证字段已删除
SELECT column_name FROM information_schema.columns
WHERE table_name = 'storyboards' AND column_name = 'default_plan_id';
-- 应返回空结果
SELECT column_name FROM information_schema.columns
WHERE table_name = 'storyboard_images' AND column_name = 'plan_id';
-- 应返回空结果
API 验证
# 验证端点已删除(应返回 404)
curl -X GET http://localhost:8000/api/v1/storyboards/{id}/plans
注意事项
- 不可逆操作:此变更会永久删除
storyboard_plans表中的所有数据 - 前端兼容性:前端代码需要同步更新,移除所有方案相关功能
- 数据备份:执行迁移前建议备份数据库
变更记录
- 2026-02-12: 初始版本,完成功能移除