mirror of
https://github.com/zhouxiaoka/autoclip.git
synced 2026-05-06 22:13:00 +08:00
4.8 KiB
4.8 KiB
合集clip_ids映射问题修复文档
问题描述
前端详情页显示12个切片,但合集数据为0,无法正确显示合集包含的切片。
问题原因分析
- 数据重复:运行多次修复脚本导致切片数据重复(12个而不是6个)
- clip_ids映射错误:合集中的clip_ids是metadata_id(如"3", "4", "5"),而不是实际的切片UUID
- 数据格式问题:clip_ids在数据库中存储为字符串而不是JSON数组
修复方案
1. 清理重复数据
问题:每个metadata_id都有两个切片,导致数据重复
解决方案:
DELETE FROM clips WHERE id IN (
SELECT id FROM (
SELECT id, ROW_NUMBER() OVER (
PARTITION BY json_extract(clip_metadata, '$.id')
ORDER BY created_at
) as rn
FROM clips
WHERE project_id = '5c48803d-0aa7-48d7-a270-2b33e4954f25'
) WHERE rn > 1
);
2. 修复clip_ids映射
问题:合集中的clip_ids是metadata_id,需要映射到实际的切片UUID
解决方案:
- 创建metadata_id到clip_id的映射
- 更新collection_metadata中的clip_ids字段
# 创建metadata_id到clip_id的映射
metadata_id_to_clip_mapping = {}
for clip in clips:
metadata = clip.clip_metadata or {}
metadata_id = metadata.get('id')
if metadata_id:
metadata_id_to_clip_mapping[str(metadata_id)] = clip.id
# 映射clip_ids
mapped_clip_ids = []
for metadata_id in original_clip_ids:
if metadata_id in metadata_id_to_clip_mapping:
mapped_clip_ids.append(metadata_id_to_clip_mapping[metadata_id])
3. 修复数据格式
问题:clip_ids在数据库中存储为字符串而不是JSON数组
解决方案:
UPDATE collections
SET collection_metadata = json_set(
collection_metadata,
'$.clip_ids',
json('["clip_id_1", "clip_id_2", "clip_id_3"]')
)
WHERE project_id = '5c48803d-0aa7-48d7-a270-2b33e4954f25';
修复结果
✅ 修复前
- 切片数量: 12个(重复)
- 合集数量: 1个
- 合集切片数量: 0个(clip_ids映射错误)
✅ 修复后
- 切片数量: 6个(正确)
- 合集数量: 1个
- 合集切片数量: 3个(正确)
📊 数据映射结果
原始clip_ids: ["3", "4", "5"] (metadata_id)
映射后clip_ids: ["4ae8d564-234e-4a5f-86a3-840d65e59f59", "c8be1b33-679c-4ac6-9af6-2af21595e458", "0125c5ec-4ba5-41ac-b328-e1bc61ea9e69"] (实际clip_id)
映射关系:
- metadata_id 3 → clip_id
4ae8d564-234e-4a5f-86a3-840d65e59f59(AI创业正进入大学生时代,这届年轻人开始弯道超车) - metadata_id 4 → clip_id
c8be1b33-679c-4ac6-9af6-2af21595e458(AI让经验失效,却让这项能力变得前所未有地重要) - metadata_id 5 → clip_id
0125c5ec-4ba5-41ac-b328-e1bc61ea9e69(未来十年真正抗风险的能力,不在技能,而在判断)
创建的工具脚本
scripts/fix_collection_clip_ids.py
- 自动映射metadata_id到clip_id
- 更新collection_metadata中的clip_ids
- 测试修复结果
使用方法:
# 修复并测试
python scripts/fix_collection_clip_ids.py --project-id <项目ID>
# 仅测试
python scripts/fix_collection_clip_ids.py --project-id <项目ID> --test-only
测试结果
✅ API测试
# 切片API
curl "http://localhost:8000/api/v1/clips/?project_id=5c48803d-0aa7-48d7-a270-2b33e4954f25"
# 返回: 6个切片 ✅
# 合集API
curl "http://localhost:8000/api/v1/collections/?project_id=5c48803d-0aa7-48d7-a270-2b33e4954f25"
# 返回: 1个合集,包含3个clip_ids ✅
✅ 前端测试
python scripts/test_frontend_data.py
# 结果: 前端数据读取测试通过 ✅
当前状态
✅ 正常工作
- 前端数据读取 ✅
- 切片API返回6个切片 ✅
- 合集API返回1个合集,包含3个切片 ✅
- 数据映射正确 ✅
⚠️ 需要进一步修复
- 合集视频访问(404错误)
- 前端视频预览功能
相关文件
backend/models/collection.py- 合集模型backend/services/collection_service.py- 合集服务backend/api/v1/collections.py- 合集APIfrontend/src/services/api.ts- 前端API客户端scripts/fix_collection_clip_ids.py- 修复脚本
经验总结
- 数据一致性:确保metadata_id和clip_id的映射关系正确
- 数据格式:JSON字段需要正确的格式(数组而不是字符串)
- 数据清理:定期清理重复数据,避免数据不一致
- 测试验证:修复后及时测试API和前端功能
下一步工作
- 修复合集视频访问:解决合集视频URL的404错误
- 优化前端体验:改进视频预览和播放功能
- 数据验证:添加数据一致性检查机制
- 自动化修复:将修复逻辑集成到数据处理流程中