mxivideo/test_segment_rename_debug.md

3.8 KiB
Raw Blame History

片段重命名调试指南

问题诊断步骤

1. 检查前端调用

在浏览器开发者工具的控制台中查看以下日志:

// 当用户重命名片段时,应该看到:
"Segment {segmentId} renamed to: {newName} - saved to database"
"Template detail reloaded from database"

// 以及模板详情加载日志:
"Template detail loaded: {templateId: ..., tracksCount: ..., segments: [...]}"

2. 检查后端日志

在后端日志中查看以下信息:

INFO - Searching for segment {segment_id} in {track_count} tracks
INFO - Track {track_idx} has {segment_count} segments
INFO - Segment {seg_idx}: id={seg_id}, name={seg_name}
INFO - Updated segment {segment_id}: '{old_name}' -> '{new_name}'

3. 验证数据库更新

可以通过以下方式验证:

  1. 前端验证

    • 重命名片段后,刷新页面
    • 检查片段名称是否保持新名称
  2. 后端验证

    • 查看数据库中的 draft_content 字段
    • 确认片段名称已更新

4. 常见问题排查

问题1片段ID不匹配

  • 症状:后端日志显示"片段不存在"
  • 原因:前端传递的 segmentId 与数据库中的不匹配
  • 解决检查片段ID的生成和传递逻辑

问题2权限问题

  • 症状:后端返回"无权限修改模板"
  • 原因用户ID不匹配或权限验证失败
  • 解决:检查用户认证状态

问题3数据库连接问题

  • 症状:更新操作失败
  • 原因:数据库连接或事务问题
  • 解决:检查数据库连接和事务处理

问题4前端状态不同步

  • 症状:本地显示更新但刷新后恢复
  • 原因:后端更新失败但前端没有回滚
  • 解决:检查错误处理和状态回滚逻辑

调试命令

手动测试后端API

# 测试更新片段名称
python -m python_core.cli template update-segment <template_id> <segment_id> "新名称" --user-id <user_id> --verbose

# 测试获取模板详情
python -m python_core.cli template detail <template_id> --user-id <user_id> --verbose

检查数据库状态

-- 查看模板的 draft_content
SELECT id, name, draft_content FROM templates WHERE id = '<template_id>';

-- 检查片段名称
SELECT 
    id, 
    name,
    JSON_EXTRACT(draft_content, '$.tracks[*].segments[*].name') as segment_names
FROM templates 
WHERE id = '<template_id>';

预期行为

正常流程

  1. 用户操作:双击片段 → 选择分类 → 确认
  2. 前端处理
    • 立即更新本地状态UI响应
    • 调用后端API保存
    • 重新加载模板详情
  3. 后端处理
    • 验证权限和数据
    • 更新数据库中的 draft_content
    • 返回成功状态
  4. 结果验证
    • 页面刷新后名称保持
    • 控制台显示成功日志

错误处理

  1. 网络错误:显示错误提示,回滚本地状态
  2. 权限错误:显示权限提示
  3. 数据错误:显示数据错误提示,回滚状态

修复历史

已修复的问题

  1. 后端API缺失:添加了 update-segment CLI命令
  2. 前端调用缺失:添加了 updateSegmentName 方法
  3. 状态同步问题:添加了重新加载逻辑
  4. 错误处理:添加了完善的错误处理和回滚

当前状态

  • Python CLI命令template update-segment
  • Rust Tauri命令update_template_segment_cli
  • TypeScript服务方法updateSegmentName
  • 前端处理逻辑:handleSegmentNameChange
  • 错误处理和状态回滚
  • 调试日志和验证

下一步

如果问题仍然存在,请:

  1. 检查浏览器控制台的日志输出
  2. 检查后端服务的日志
  3. 手动测试后端CLI命令
  4. 验证数据库中的数据是否正确更新

通过这些步骤可以准确定位问题所在。