laoyang
41572b77e7
第 21 批收尾:按需补「我的日程」本(老库也能拿到)
线上实测发现第一版没覆盖到的情况:把 'custom' => 「我的日程」加进
`Calendar::DEFAULT_KINDS` **是不够的** —— `seedDefaults()` 只在
**安装**与**结构升级**两条路径上被调用,而线上这套库早就升完级了,
于是老用户永远拿不到那一本。线上实测:owner=1 可写的普通本 0 本
(唯一那本 custom「工作」是用户自己建的)。
后果不只是"少一本":新建日程的"放在哪本"里全是派生本、默认还选中排最前的
**观影** → 用户直接打字点「加上」,建出来的是一条**观影记录**(建错东西,
事后极难发现:日历里看着是多了条日程,观影列表里莫名多一条)。
修法:
- 新增 `Calendar::ensurePersonalBook()` —— 按需补,幂等判据是
`owner_id + kind='custom'`(**刻意不看名字**,否则用户把自己的本子改名之后
会又冒出一本「我的日程」)。
- 由 `calendar` 路由在打开日历时顺手调一次(一次请求只多一条 SELECT)。
- 模板里再兜一道:默认选中的不是可写普通本时显式提示
"你还没有自己的日程本,上面选的是一本派生本(加进去会变成观影/旅程记录)"。
验证:e2e **1064/0**(新增 5 条:删本 → 打开日历自己补回来 → 名字对 → 幂等 →
改名后也不会又冒一本);线上以 Web 用户(www)身份实测 before=1 after=1
(正确幂等,不动用户自己那本);真机探针 75/0 · 桌面几何 428/0 · 部署自检 0 失败。
⚠️ 测试侧顺带记一个坑:夹具删"有日程的本子"时 `calendar_events.calendar_id`
外键是 **RESTRICT**,而用**多语句** `mysql -e "SET FOREIGN_KEY_CHECKS=0; DELETE...;"`
时一旦有一句被挡下,**整个 -e 静默失败**(返回码 0、无 stderr),
症状是夹具自检报"还有 2 本"、后面断言一路红,单独手跑同样语句却是通的。
改成**一条一条发并检查返回码**后就好了。
2026-10-06 13:44:24 +08:00
..
2026-09-30 20:22:46 +08:00
2026-09-30 00:49:53 +08:00
2026-09-30 13:24:26 +08:00
2026-10-03 15:01:38 +08:00
2026-10-03 08:18:05 +08:00
2026-10-03 08:18:05 +08:00
2026-10-02 09:28:07 +08:00
2026-10-03 08:18:05 +08:00
2026-10-05 10:58:17 +08:00
2026-10-05 10:58:17 +08:00
2026-10-05 10:58:17 +08:00
2026-10-03 15:01:38 +08:00
2026-10-03 08:18:05 +08:00
2026-10-06 13:44:24 +08:00
2026-10-04 19:43:00 +08:00
2026-10-01 00:12:04 +08:00
2026-10-04 08:56:40 +08:00
2026-10-04 08:56:40 +08:00
2026-09-30 00:49:53 +08:00
2026-09-30 00:49:53 +08:00
2026-10-03 20:23:22 +08:00
2026-10-05 13:26:49 +08:00
2026-09-30 00:49:53 +08:00
2026-10-05 16:45:10 +08:00
2026-10-02 09:28:07 +08:00
2026-10-04 19:43:00 +08:00
2026-10-05 10:58:17 +08:00
2026-10-05 10:58:17 +08:00
2026-10-06 03:14:18 +08:00
2026-10-05 10:58:17 +08:00
2026-10-03 08:18:05 +08:00
2026-10-04 19:43:00 +08:00
2026-09-30 09:44:55 +08:00
2026-10-05 10:58:17 +08:00
2026-10-02 09:28:07 +08:00
2026-10-01 00:12:04 +08:00
2026-10-02 09:28:07 +08:00
2026-09-30 13:24:26 +08:00
2026-10-05 16:45:10 +08:00
2026-10-04 08:56:40 +08:00
2026-09-30 13:24:26 +08:00
2026-10-03 19:27:14 +08:00
2026-10-03 19:27:14 +08:00
2026-10-04 08:56:40 +08:00
2026-09-30 16:12:28 +08:00
2026-10-03 11:30:48 +08:00
2026-10-04 08:56:40 +08:00
2026-10-02 22:08:13 +08:00
2026-10-03 11:30:48 +08:00
2026-10-03 15:01:38 +08:00
2026-10-06 03:14:18 +08:00
2026-09-30 00:49:53 +08:00
2026-10-06 03:14:18 +08:00
2026-10-05 10:58:17 +08:00
2026-10-06 12:08:40 +08:00
2026-10-02 09:28:07 +08:00
2026-09-30 11:06:22 +08:00
2026-10-05 16:45:10 +08:00
2026-09-30 08:13:07 +08:00