tamakyi
8380fc9e2b
fix(db): 「最后一个回答」不再被置顶/公开切换推到现在
`QuestionStats` 的 `last_a` 取的是 `MAX(updated_at)`,而 GORM 的 Update
一律刷新 updated_at:置顶、公开/私密切换、标记已读都会走 Update。
后果是箱主整理一下旧问题(一次回答都没发生),公开接口
`/api/v1/site-stats` 就说「刚刚有人回答了」。
实测(真库,临时测试已删):一条 9 天前回答的提问,置顶/公开切换后
LastAnswerAt 从 `10-15 10:23` 变成 `10-24 10:23`,偏差 216 小时。
改成 `COALESCE(answered_at, updated_at)`:
- 新数据取 answered_at(首次回答时间,改写回答不重置);
- 加列之前的历史行 answered_at 为空,退回 updated_at —— 与改动前口径
一致,不会让这些行从统计里消失(有测试锁住这一半)。
同时删掉 `GetHotQuestions`:全仓零调用点(只有接口声明 + 实现,route/
里 Questions 的 15 个调用不含它),且同样按 updated_at 排序 ——
死代码 + 错误排序,留着就是给以后的人埋坑,要用时按 answered_at 重写。
影响面:`/api/v1/site-stats` 的 `last_answer_at` 字段与 `text` 里的
「最后一个回答发生在」,字段名与结构不变,只是值更准(更早)。无 schema
变更、无接口变更。性能:执行计划仍是 Seq Scan + Aggregate,5 万行实测
7.9ms vs 8.0ms,差异在噪声带内(0~1.8ms,折合每行约 30ns),
而该接口有 30 分钟进程内缓存。
新增两个回归测试:
- TestQuestionStatsLastAnswerIgnoresLaterEdits(改前红、改后绿)
- TestQuestionStatsLastAnswerFallsBackToUpdatedAt(历史行回退)
2026-10-24 10:30:43 +08:00
..
2026-10-24 01:20:02 +08:00
2026-10-24 01:45:34 +08:00
2026-10-24 10:30:43 +08:00
2026-09-10 10:56:27 +08:00
2026-09-10 10:56:27 +08:00
2026-09-15 11:06:09 +08:00
2026-10-24 01:45:34 +08:00
2026-09-10 10:56:27 +08:00
2026-09-15 11:06:09 +08:00
2026-09-15 11:06:09 +08:00
2026-10-21 15:43:25 +08:00
2026-10-21 15:43:25 +08:00
2026-10-21 15:43:25 +08:00
2026-10-23 10:53:03 +08:00
2026-09-10 10:56:27 +08:00
2026-09-10 10:56:27 +08:00
2026-09-10 10:56:27 +08:00
2026-09-10 10:56:27 +08:00
2026-10-22 17:04:10 +08:00
2026-10-24 10:30:43 +08:00
2026-10-18 22:18:21 +08:00
2026-10-18 23:32:38 +08:00
2026-10-18 21:14:59 +08:00
2026-10-19 01:58:00 +08:00
2026-09-15 11:06:09 +08:00
2026-09-10 10:56:27 +08:00
2026-09-10 10:56:27 +08:00
2026-09-15 13:10:57 +08:00
2026-10-19 15:23:11 +08:00
2026-09-10 10:56:27 +08:00
2026-09-10 10:56:27 +08:00
2026-09-10 10:56:27 +08:00
2026-09-10 10:56:27 +08:00
2026-09-10 10:56:27 +08:00
2026-09-10 10:56:27 +08:00
2026-09-10 10:56:27 +08:00
2026-09-10 10:56:27 +08:00