2.8 KiB
2.8 KiB
2026-10-23
单题分享卡二维码提到 5px/模块(310f851)
用户决定「单题一起做」,同时否掉方案 5(结果落盘/R2)——理由:功能使用率不高,不值得大动干戈。
- 单题卡卡片 210×255 放不下 5px 模块(37 模块要 185px):
QQRCardW236、QQRCardH300、QQRSize190。X 由QContentX+QContentW-QQRCardW派生 → 679,Y 居中 → 120。 QTextMaxW/qLeftClip都从QQRCardX派生,左栏自动收窄 26px,无需另改。- 抽了
drawQuestionQRCard(canvas, user, question, logo, fontCtx)(handler 只剩调用), 这样测试能直接渲染整卡:TestQuestionQRCardLayout断言正方形 / 模块≥5 / 四边留白≥20 / 居中≤1px,TEST_PREVIEW=1出outputs/sharecard-preview/question-card.png。 - 实测:二维码 185px、居中偏差 0.5px、上下留白 34px;gozxing 在 960/720/480/320 全通过。
变异验证:
QQRSize改回 150 → "QR module is 4px, want >=5" FAIL。 - 未做(用户明确不要):分享卡结果落盘/上 R2。进程内 LRU 仍是 16 条 + TTL 1h, 冷渲染成本接受现状。
部署后复验(箱子卡 + 单题卡,310f851)
- 箱子卡:QR 185×185 @ y120-304 / x702-886,卡中心 795 → 着墨中心 794.0(−1.0px); 提示语 794.0、分隔线 795.0、链接两行 795.0 / 794.5;上下留白各 18px。
- 单题卡:QR 185×185 @ y154-338 / x704-888,卡中心 797 → 着墨中心 796.0(−1.0px); 提示语 797.0;上下留白 34 / 33px。
- 端到端解码(部署图,含真实背景与内嵌头像):两张卡在 960 / 720 / 480 / 320 宽全部 OK,
内容正确(单题卡
/114)。 - 顺带确认 不是 bug:删除提问后分享卡立刻 302(
GetByID在缓存查询之前), 不存在「删了还能靠缓存取到图」的窗口。
缓存 key 排查结论(675cecb)
用户要求「有影响就修」。查下来当前没有实际影响,只有一条理论缺口:
| 可能场景 | 是否真有影响 | 原因 |
|---|---|---|
| 用户改域名 → 二维码指向旧域名 | ❌ 当前无 | Domain 只在注册时写(register.go / CreateUser),无改域名入口 |
| 改 ExternalURL / ShareBackground | ❌ 无 | 配置需重启,缓存是进程内的,重启即清 |
| 换头像/背景后仍是旧图 | ❌ 无 | R2 key = picture/日期/随机 hex,内容不可变,换图必换 URL |
| 域名将来可改 | ⚠️ 理论 | 单题卡 key 未含 user.Domain |
处理:给 questionShareCardCacheKey 补 user.Domain(箱子卡本来就有);
两处「TTL 30 分钟」注释改成 1 小时(代码一直是 time.Hour)。
新增 TestShareCardCacheKeysCoverDrawnFields——逐字段变异断言 key 必须变,
去掉 Domain 立刻 FAIL。以后改分享卡要加新字段时,先看这张测试。