60 lines
2.9 KiB
Markdown
60 lines
2.9 KiB
Markdown
# Phase 0 门店开通与员工邀请验收记录
|
||
|
||
> 日期:2026-08-02
|
||
> 状态:Code Complete / Ready for Release,待生产迁移与微信真机验收
|
||
> 生产数据库与服务器:本批未触碰
|
||
|
||
## 1. 自动验证
|
||
|
||
| 检查 | 结果 |
|
||
|------|------|
|
||
| Backend tests | PASS(193 tests,0 failure/error/skip) |
|
||
| Backend package | PASS |
|
||
| Admin production build | PASS |
|
||
| H5 build | PASS |
|
||
| mp-weixin build + app-json verification | PASS |
|
||
| Ontology validation/drift | PASS(258 条;65/65 HTTP、15/15 JPA、0 drift) |
|
||
| Release shell syntax | PASS(`backend/deploy/*.sh`) |
|
||
|
||
## 2. 自动化覆盖
|
||
|
||
- token 原文与数据库 hash 分离、手机号脱敏;
|
||
- 邀请手机号不匹配不创建账号;
|
||
- 接受成功创建 staff、消费邀请、写低敏 AuditLog;
|
||
- 开通必填项缺失不能完成,单人门店可完成;
|
||
- 已完成开通的门店不能再清空名称、电话或地址;
|
||
- 老板微信核验注册不产生可登录密码,并同时写入 `store_registered` BusinessEvent 与 AuditLog;
|
||
- Audit metadata 拒绝 token/手机号;
|
||
- 门店/角色/删除状态变化会立即让旧 session 失效;
|
||
- Nginx Petstore 专用 access log 只记录 `$uri`,不记录携带报告/邀请 token 的 query;
|
||
- 第六个迁移包含 token hash、状态机与六项回执不变量。
|
||
|
||
## 3. 三角色真机验收(发布前必做)
|
||
|
||
### Boss
|
||
|
||
- [ ] 新微信手机号创建门店,无手填手机号/明文密码;自动登录后进入开通清单。
|
||
- [ ] 缺地址时不能完成;补齐资料、确认容量和服务后可完成;单人门店无需先邀请员工。
|
||
- [ ] 创建 3/7/14/30 天邀请,创建后只显示一次原始口令;可分享小程序卡片。
|
||
- [ ] 邀请列表只有脱敏手机号;pending 可撤销,accepted 不能撤销。
|
||
|
||
### Staff
|
||
|
||
- [ ] 从卡片进入看到正确门店、姓名、脱敏手机号与有效期。
|
||
- [ ] 不匹配微信手机号被拒绝且不创建账号;匹配手机号成功加入并直接获得 staff session。
|
||
- [ ] 邀请重复打开幂等登录同一 staff;过期/撤销邀请有明确提示。
|
||
- [ ] 被老板删除后,已有页面下一次受保护请求立即 401 并要求重新登录。
|
||
|
||
### Customer / 权限反例
|
||
|
||
- [ ] customer 不能查看/创建/撤销门店邀请,也不能完成开通。
|
||
- [ ] 已有 customer 手机号接受员工邀请明确返回账号冲突,不静默改变角色。
|
||
- [ ] legacy 永久邀请码查询/注册、直接创建员工、旧老板/门店注册入口均返回明确停用码且无写入。
|
||
|
||
## 4. 发布门禁
|
||
|
||
- [ ] 按固定顺序执行第六个迁移 `20260802_create_store_onboarding.sql`,六项验证均为 0。
|
||
- [ ] 以最终生产配置运行 JPA `validate` + 24 项只读不变量预检。
|
||
- [ ] 微信体验版双微信账号完成 Boss → 分享 → Staff 接受全链路;证据不包含完整手机号或 token。
|
||
- [ ] 旧版本回滚已确认忽略新增表/列;不执行 down migration。
|