浅念
|
cdead49838
|
feat(viewer): likes, bubbles, visit reporting and hot sorting
Task 10 viewer 互动化:
- 点赞:useLikes 批次状态机(500ms 防抖 / 5 次满额即冲 / 失败同 batchId
退避重试 3 次后回滚丢弃),乐观计数 + 服务端 total 权威校准
(countVersion 单调),大图与格子双入口;
- WS 实时:RealtimeClient 纯状态机(半频心跳、指数退避重连、三败降级、
重连成功 resync 第 1 页重取),消息路由器做 likes.burst 自身过滤
(originBatchIds 求交)、隐藏页暂停与减少动画下仅校准不出气泡;
photo.hidden/deleted 即时移出序列并回退邻居大图;降级后 8s 轮询接管;
- 浏览上报:visitorId 跨标签 BroadcastChannel first-writer-wins 协调,
可见时上报、requestId 持久幂等、网络失败指数重试;
- 排序:最新/热门 chips(热门走 ov 冷快照),大图打开期间禁用切换;
顶栏「减少动画」偏好开关;
- 契约包新增 ./realtime 子路径出口(浏览器面不可引桶出口——其连带
internal-sync 的 node:crypto 会被 Vite 外置化致整页崩溃);
- e2e 注入钩子 __viewerWsUrl/__viewerWsRetryBaseMs/__viewerRealtimePollMs/
__viewerBubbleMs 与 .activity[data-connection] 连接态锚。
vitest:viewer 105(新增 36:likes 批次 8、visitor 协调 5、上报门控 4、
路由 8、WS 状态机 7、排序 4);Playwright:viewer 21(新增 likes.spec 7、
journey 补互动腿断言)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-18 19:52:27 +08:00 |
|
浅念
|
40f8f37ca4
|
test(e2e): p1b cross-frontend playwright journey
- viewer playwright.config: third webServer boots admin dev (5176,
reuseExisting) so one config serves both frontends
- journey.spec.ts: admin UI (login, zh+en album, real-jpeg banner via
file chooser, category, staffB invite by account search, logout) ->
staffB API uploads x3 (init/presign-PUT/complete) -> worker
PublishService.processPhoto x3 -> public list verify -> viewer UI
(banner bytes, zh->en switch, waterfall 3, chip filter 1, lightbox
zoom/close, deep link) -> admin hide -> viewer 2 + hidden deep-link
404 notice -> empty album state
- cleanup: journey album domain rows + staffB account via Prisma
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-18 12:54:18 +08:00 |
|