fix/32-edit-version-reuse
main
#32 缺陷修复:编辑正文回到曾经用过的版本会返回 500。方案见评论 8210。
uq_job_request
stageEditJob
(owner_id, chapter_id, content_sha256)
- 根因:编辑任务键按「章节+内容摘要」派生,与 uq_job_request 唯一键相撞, 改回曾经用过的正文时 Create 触发 MySQL 1062,整笔事务回滚并冒泡为通用 500 - 修复:新增 stageEditJob,先按 (owner_id, chapter_id, content_sha256) 锁定查询该版本的任务行, 找到就复用并重置为 pending/attempts=0/清空失败原因,找不到才用派生键创建; 粘贴版本的任务行同样可被复用,因此一章一个内容版本只保留一行 - 不变的门控:旧版本任务仍不能把新版本章节拉回处理(RetryIngestJob 409)、 未改动的正文不产生新版本、同一版本重复处理幂等 - 无 schema 变化,无需迁移 - 测试:新增 TestMySQLChapterEditBackToAPreviousVersion(A→B→A→B 此前第三步 500、 一章一版本一行、复用行干净重启、失败版本再次成为当前版本时复活、读者返回最后正文); Go 顶层用例 92 项;真实 API+MySQL 21 项检查通过 - 文档:Architecture / Business-Rules / Local-Development 记录规则与验证
No dependencies set.
The note is not visible to the blocked user.
#32 缺陷修复:编辑正文回到曾经用过的版本会返回 500。方案见评论 8210。
uq_job_request唯一键,整笔事务回滚并冒泡为通用 500stageEditJob按(owner_id, chapter_id, content_sha256)查询该版本的任务行,找到就复用并重置为pending/attempts=0/清空失败原因,找不到才创建;粘贴版本的任务行同样可复用,一章一个版本只保留一行