b5145d6860
- P1b-验收记录.md: A08 (viewer.spec + journey), A12 partial (viewer
i18n switch/fallback + admin template i18n; data-lang is P4b), R09
(assets.e2e + admin upload + viewer render + journey banner), P1a
final-review 4 items registered (47fb81a, absent from P1a record),
9-row deviation table (ports 5175/5176 + cms conflict disclosure,
staff-wide account lookup, art-design-pro v3.0.2 pin + lint ignore,
no thumbnails in AdminPhoto, session-scoped banner preview,
errorCode/pending_upload omissions, useCursorList, esbuild
onlyBuiltDependencies), P2 handover, per-package test stats
- master roadmap: P1 fully complete (P1a + P1b), tag p1; G1 formally
registered as skipped (no OSS credentials provided)
- P1b plan: all task checkboxes marked with completion notes
Co-Authored-By: Claude Code <noreply@anthropic.com>
84 lines
8.5 KiB
Markdown
84 lines
8.5 KiB
Markdown
# P1b 验收记录
|
||
|
||
- **阶段**:P1b 观众页与管理后台(计划 `docs/plans/2026-09-18-P1b-观众页与管理后台.md`,Task 1–12)
|
||
- **日期**:2026-09-18
|
||
- **基线 commits**:`62382ec..HEAD`(P1b 计划提交之后至跨端冒烟 `40f8f37`,共 12 个实施提交,不含本记录提交)
|
||
- **执行模式**:子代理驱动 + 双审(每任务先写失败测试→实现→通过→提交;跨任务由子代理接力,主代理与复核代理双重审查)
|
||
- **回归门**:`pnpm lint && pnpm typecheck && pnpm test && pnpm e2e && pnpm build` 全绿(数字见文末统计表;viewer/admin 的 vitest + playwright 任务全部入列)
|
||
- **基础设施**:photo-live MySQL/Redis/MinIO compose(`infra/`,端口绑定 127.0.0.1),前端 e2e 打真实 API + 真实 MinIO 对象(种子走 Prisma/storage 直种或真实 UI/API 链路)
|
||
|
||
---
|
||
|
||
## A08 大图操作(基础级,Web 端)
|
||
|
||
- 证据:`apps/viewer/e2e/viewer.spec.ts` **4 用例**全绿——点击开大图(browse 经签名 URL 取回真实字节,naturalWidth > 0)、左右切换保持列表序列且 URL 同步 replace(深链可分享)、滚轮缩放受控 CSS transform + 双击复位、**关闭精确回到原滚动位置**、深链直达目标照片(背后列表构成完整序列)、404/已下线照片深链本地化提示 + 可用返回链接、越过末页边界自动拉次页扩展序列(31/32)。
|
||
- 单测佐证:`apps/viewer/src/__tests__/`(lightbox / viewer-route / feed 等,vitest 65 用例的一部分——切换序列、URL 语义、滚动回位、缩放边界)。
|
||
- 跨端佐证:`apps/viewer/e2e/journey.spec.ts`(Task 11)开图→缩放→关闭→深链→被隐照片深链 404 提示全链走真实数据。
|
||
- App 端滑动手势/性能级验收随 P3(A08 移动级)。
|
||
|
||
## A12 多语言(部分:viewer + admin)
|
||
|
||
- viewer:`apps/viewer/e2e/album.spec.ts`——语言切换按钮 zh↔en **内容随切**(标题/描述/场地/时间格式/空态/页面 title)、**en UI + zh-only 相册内容回退 zh**(服务端 resolvedLocale=zh-CN,UI chrome 保持用户所选语言)、chips/错误/空态文案双语;词条完整性有 vitest(i18n.spec.ts 等)。瀑布流/大图/深链提示文案随 locale 全覆盖(feed.spec / viewer.spec 断言中文文案)。
|
||
- admin:art-design-pro 模板 i18n(zh/en)沿用,业务词条(albumsManage.*/topBar.*/common.* 等)入 zh/en 语言包;登录/相册/照片管理 e2e 的文案断言均走真实渲染(占位符、按钮、状态标签、确认框)。
|
||
- **组件 data-lang 语言配置属 P4b**(embed-loader);A12 全端语言验收(四端切换/回退/漏译)随 P4b T15。
|
||
|
||
## R09 宣传图(顶部 banner)
|
||
|
||
- API 级:`services/api/test/assets.e2e-spec.ts` **14 用例**——banner presign init→PUT→complete 上传链(复用照片上传机制)、生效态/替换语义、locale 资产解析、公开端点签名 URL 下发。
|
||
- admin UI:`apps/admin/e2e/albums.spec.ts`——真实 jpeg 走 file chooser → init/PUT/complete → 状态与预览。
|
||
- viewer UI:`apps/viewer/e2e/album.spec.ts`——banner 签名 URL 取回真实字节渲染(naturalWidth > 0);无 banner 相册不渲染图。
|
||
- 跨端闭环:`journey.spec.ts`——admin UI 上传的 banner 在 viewer 活动页真实渲染。
|
||
|
||
## P1a 终审修缮 4 项落实登记(Task 1,commit `47fb81a`)
|
||
|
||
> P1a 验收记录(`8a09001`)偏差表未含下列各项——终审发生于该记录落档之后,按计划 Task 1 在此补登:
|
||
|
||
1. **框架级 404 错误码**:contracts 新增 `NOT_FOUND`;AllExceptionsFilter 未知路由默认映射由 `ALBUM_NOT_FOUND` 改为 `NOT_FOUND`(业务 404 仍走显式 ApiException 专用码,防枚举语义不变)。
|
||
2. **configureApp 抽取**:prefix/CORS/x-powered-by 统一配置由 main-cn 与 e2e 共享;禁用 `x-powered-by` 并有 e2e 断言。
|
||
3. **分页参数抽取**:parseCursor/parseLimit(含页大小边界)从 albums.controller 移入 `shared/pagination`,members/uploads/public 一并复用。
|
||
4. **compose 端口回环绑定**:MySQL/Redis/MinIO 发布端口绑定 127.0.0.1(不暴露局域网),`.env.example` 端点同步。
|
||
- 随附 e2e:unknown-route 404 `NOT_FOUND` + `x-powered-by` 缺席两例(api e2e 120 → 122)。
|
||
|
||
---
|
||
|
||
## 偏差与发现登记
|
||
|
||
| # | 事项 | 处理/结论 |
|
||
|---|------|-----------|
|
||
| 1 | dev 端口 5175/5176 | **用户裁决 2026-09-18**:viewer 5175 / admin 5176(原计划 5173/5174)。事由:开发机 5173 已被用户另一 cms 项目占用,首次起 viewer dev 时发生端口冲突;裁决固定 5175/5176 并同步 CORS_ORIGINS(commit `04b5641`,事故在此披露) |
|
||
| 2 | 账号查询访问策略 | **用户裁决 2026-09-18**:契约原描述 admin/owner 可查,实作放宽为**全体已认证 staff**(邀请发起方不限创建者;泄露面仅激活账号的最小展示字段 id/account/displayName,接收方为已认证内部人员) |
|
||
| 3 | Art Design Pro v3.0.2 锁定 | 模板来源仓库/tag/commit 与裁剪清单登记于 `apps/admin/SOURCE.md` + package.json `//` 字段;模板自带 eslint9 flat 配置与根配置规则集不同——**根 ESLint ignore `apps/admin/**`**(偏差注册,不强改模板);模板版本锁定,升级需重新评估 |
|
||
| 4 | AdminPhoto 无缩略图 | 管理照片列表条目不含缩略图(不为列表逐条签 URL,控制签名量/带宽);P4a 后台完备时再评估 |
|
||
| 5 | banner 预览会话级 | admin banner 上传成功后的预览图走当次会话内存 URL,不落库回显(刷新即失,生效事实以 album_assets 行为准);e2e 在同一页面会话内断言预览 |
|
||
| 6 | errorCode 不在 PhotoRecord | 管理列表契约 PhotoRecord 未含 errorCode(处理失败详情不进列表;失败原因排查走单图/日志),P4a 完善 |
|
||
| 7 | pending_upload 不在管理列表 | listAlbumPhotos 不返回 pending_upload(未 complete 的会话草稿不算已提交照片),管理页只列已提交域 |
|
||
| 8 | useCursorList 替代 useTable | admin 列表页自建游标分页 composable(对齐后端 keyset 契约),不用模板 useTable 的偏移分页 |
|
||
| 9 | esbuild onlyBuiltDependencies | pnpm 10 默认拦截依赖构建脚本,根 package.json 白名单放行 esbuild(Vite 平台二进制下载),登记偏差 |
|
||
|
||
## 未尽事项 / 移交
|
||
|
||
- **P2**:outbox 已落库仍**无消费者**(按 eventId 去重、entityVersion 单调消费);**公开端点无限速**;观众页**最新/热门排序**(契约与 UI 随 P2 扩展,当前仅 publishedAt 序);**浏览统计**(窗口去重)。
|
||
- **P3**:UI 上传链路(App/后台界面上传;P1b staffB 上传走 API——journey 即按此验收)。
|
||
- **P4a**:AdminPhoto 缩略图、批量隐藏、账号治理、后台语言切换完整验收;banner 预览持久回显。
|
||
- **P4b**:传播组件 data-lang(A12 全端验收)。
|
||
- **G1**:真实 OSS 凭证冒烟——**凭证未提供,按总纲 P1 出口约定「无凭证显式跳过并登记」正式登记为跳过**(本地 MinIO 已覆盖 presign/head/禁止覆盖/受控复制全语义)。
|
||
|
||
---
|
||
|
||
## 测试统计汇总(2026-09-18 回归门实测)
|
||
|
||
| 包 | 单测 suites(files)/tests | e2e suites(tests) |
|
||
|----|--------------------------|-------------------|
|
||
| @photo/contracts | 2 / 8 | – |
|
||
| @photo/db-cn | –(schema 校验随 migrate/生成流程) | – |
|
||
| @photo/storage | 1 / 6(真实 MinIO 集成) | – |
|
||
| @photo/api-cn | 6 / 46 | **12 / 148**(auth 14、albums 20、members-categories 15、uploads 20、photos 14、public 17、**assets 14、photos-admin 6、users-lookup 6**、health 6、db.semantics 6、full-chain 10) |
|
||
| @photo/worker | 1 / 8 | 1 / 7(publish) |
|
||
| @photo/viewer | vitest **10 / 65** | playwright **5 个 spec / 14 用例**(album 5、feed 3、viewer 4、smoke 1、**journey 1**) |
|
||
| @photo/admin | vitest **4 / 15** | playwright **2 个 spec / 7 用例**(login 5、albums 2) |
|
||
| **合计** | **24 / 148** | **20 / 176**(jest 13 suites / 155 用例 + playwright 7 个 spec / 21 用例) |
|
||
|
||
- 附加门:lint 7/7 任务、typecheck 10/10 任务、build 7/7 任务全绿(viewer 产物 166 KB js / admin 产物含 element-plus 按需分包)。
|
||
- 总测试数(单测 + e2e):**324**。
|
||
- 跨端联调(Task 11):viewer playwright 配置以第三个 webServer 拉起 admin dev(5176,复用已在跑实例),`journey.spec.ts` 单剧本贯通 admin UI → staffB API → worker 发布事务 → viewer UI → admin 隐藏 → viewer 收敛 → 空态,22–35s 稳定通过。
|