member-enrollment-release-2026-09-09.md 3.7 KB

用户管理与按分类开课上线验收(2026-09-09)

发布结果

生产数据库 server.xiaoshu.pro 已完成用户开课迁移。运营主网关、运营 V3 网关、管理网关、App 网关均已发布;发布后读取服务器代码核对 SHA-256,与本地定义一致。

管理端与移动端生产构建通过,本地管理端登录页可打开。仓库没有公网静态站点托管配置,尚未发布或验证公网前端页面;本次线上结果指数据库与云函数,以及真实网关请求验收。

备份、迁移和修复

  • 原始业务备份保存在受限目录 tmp/member-enrollment-1788941878957/;包括账号余额、开课、预约、预留、分类映射、内容关联及目录。发布前云函数和 schema 另有本机受限备份,未提交凭据或业务数据到 Git。
  • 安装课时事务、开课及预约函数、账户保护触发器、有效开课唯一约束和幂等约束。
  • 按生产物理类型补齐用户编号的显式 numeric 转换;审计写入原有 SysLog 字段及必填 sourceKey;Parse 流水 schema 补齐 payMethod。事务回归测试覆盖这些生产差异。
  • 预检兼容 Parse 返回的字符串形式数字,避免把已有模型 58 关联误判为缺失。
  • 一笔既有 -1 节余额已核对至 2024-06-02 的原始管理员流水。通过逐项声明保留欠课,未调整为零、未生成退款归属;没有预留超额或重复预留。

迁移后共有 1,514 条历史开课记录:216 条有效、1,298 条待确认。待确认包含未确定新分类或关联缺失的记录;预检发现 254 条孤立关联。没有自动合并、删除学习进度或猜测分类。待确认记录需要完成分类和关联核对后才能继续按新流程排课。

真实服务器验收

npm run members:smoke 的 25 项断言通过,使用一次性门店、教师、学员及管理员,调用已发布的运营与 App 网关:

  • 新增学员并关联门店;四类账户总部入账和门店划拨,重复请求不重复记账。
  • 零余额实际开课请求被拒绝;六个分类可选,语法写作内容按学阶限制。
  • 同词表分别开单词课、自学课;同分类重复开课拒绝,原请求重试返回同一记录。
  • 用户端返回两个独立开课分类;同词表单元和词汇进度查询一致;教师预约携带对应 bindingId 和分类。
  • 旧排课请求缺少 bindingId 且存在分类歧义时返回 409。
  • 教师开始、完课与管理员重试只扣一次;取消释放和恢复预留成功。
  • 服务器独立 HTTP 请求并发验证:最后一节课仅一个预约成功;退款与预留仅一方成功;充值与完课均成功且余额没有覆盖。
  • 门店及学员四类账户余额与所有对应流水逐项对账;全部课时业务单都有事务审计。

npm run ops:smoke 单独运行通过,覆盖现有会员、门店、陪练、日历、教学标准、工资及学习报表。旧冒烟用例已改为传具体 bindingId 并识别新的未开课提示。

发布后再次读取生产数据,与迁移前备份比较:真实账号四类余额变更数 0,历史学习进度变更数 0,残留测试账号 0、临时函数 0、测试预留 0。测试业务行已清理,操作审计保留。

本地验证

  • 用户开课数据库及网关测试:23 项通过,包含生产编号类型和审计约束。
  • 管理端 Chrome Headless:171 项通过。
  • 云函数语法:11 个定义通过。
  • 管理端与移动端生产构建通过。

服务器验收没有改动真实教学规则;规则更新不重算既有预约快照的验证由本地事务与网关测试覆盖。本记录不代表公网前端或真实学员人工体验验收。