store-web-release-2026-10-15.md 4.4 KB

正式管理端发布与门店流程验收

发布结果

  • 正式入口:https://admin.xiaoshu.pro/admin/login。
  • 华为云 CDN 域名详情确认源站为 xiaoshu-admin.obs-website.cn-south-1.myhuaweicloud.com,对应 OBS 桶 xiaoshu-admin,区域 cn-south-1。这不是学生端站点。
  • 前端提交:817b561a537fab1b0411f0581aa61200bef125a6;版本号:817b561a537f-20261015T124317689Z。
  • 发布前备份桶内 362 个对象,共约 19.14 MB。旧入口 MD5 为 62a1fd2a225e4f1c1cae58587cf6d9ef,与公网原入口一致。
  • 先上传资源,沿用旧站点静态对象的 public-read 权限;源站校验后上传版本清单,最后切换 index.html。旧哈希资源保留。
  • CDN 目录刷新任务:7892998146,回读状态 task_done,成功 1、失败 0。
  • node scripts/release-admin-web.mjs --verify 校验公网 95 个文件的 SHA-256、版本清单和登录/工资深层路由成功。
  • 另行不带查询参数读取 /、/admin/login、/admin/store-home、/admin/schedule,均为 HTTP 200 且入口哈希与本次发布相同。

真实接口流程

在正式后端创建明确标记的隔离测试门店、老师和学生,使用测试门店真实密码调用正式登录接口,返回 store-admin。没有修改真实门店密码,也没有使用临时会话冒充密码登录验证。

通过实际业务接口验证:

  1. 总部给测试门店记入 1 节 30 分钟课时及 0.5 小时陪练额度,门店划拨给测试学生。无真实收款。
  2. 门店开通单词课,排课选项只包含本店测试学生、老师。
  3. 创建 2026-10-16 的一节测试预约,使用同一请求号重试后仍只有一节。正确预留 1 节课时及 0.5 小时陪练。
  4. 指定外店学生的排课请求被拒绝。
  5. 修改时间成功;使用修改前版本取消,被拒绝为过期请求。
  6. 使用最新版本取消,预留全部释放;恢复后重新预留;再次取消后预留归零。

验收发现数据库 updatedAt 有微秒,而前端接口通过 JavaScript Date 返回毫秒;原 SQL 精确比较使新预约修改/取消误报“预约已变更”。已修改两个版本判断,与 API 的毫秒精度一致,仍保留过期版本拒绝。生产通过 scripts/sql/schedule-version-precision.sql 只替换现有函数的比较表达式,未覆盖其他线上热修复;更新前备份函数,更新后核对定义只发生这两处变化。

清理与回归

  • 测试学生额度按原单退回,测试门店入账按原凭据冲销;双方四类余额均为零,预约预留为零。
  • 测试课程回收,三个测试账号标记删除并停用,所有测试会话撤销。保留业务流水及操作审计,不删除或改写真实交易。
  • 本轮定向测试 34 项通过:开课/课时事务、门店隔离、发布校验。包含微秒时间经 JSON 返回后的编辑/取消/恢复、拒绝旧版本、精度迁移重复执行。
  • 发布后再次运行 35 项线上权限检查通过;两个现有门店的学生范围仍隔离,总部会员总数仍为 628。门店 287 尚无本店有效老师,仍需总部配置老师归属后才能指定老师排课;门店 100 有 35 位本店有效老师。
  • 正式浏览器可读取运营工作台,但浏览器自动化出现持续超时,未完成门店表单的浏览器点击全流程。上述登录及排课验收来自正式 HTTP 接口与数据回读,不能替代完整浏览器交互验收。手机及微信 WebView 未测试。

后续发布与回滚

仓库的 scripts/release-admin-web.mjs 负责打包和验证。上传使用官方 obsutil,CDN 使用 hcloud CDN CreateRefreshTasks/v2,凭据从受保护的现有配置读取,不写入仓库或静态包。

已确认的上传目标为 obs://xiaoshu-admin/,endpoint 为 obs.cn-south-1.myhuaweicloud.com。后续发布仍应先备份、上传资源并校验,再更新版本清单和入口,刷新 https://admin.xiaoshu.pro/ 目录,最后运行公网校验。不得执行清空整个桶的命令。

本次完整基线、上传记录、函数定义、接口验收及清理结果保存在本机受保护目录 /Users/mac/.local/state/xiaoshu/cloud-releases/2026-10-15-store-web/。回滚前端时恢复基线中的入口及非哈希资源,再刷新 CDN;保留旧新两套哈希资源。数据库回滚仅基于保存的两个函数定义并确认没有后续修改,不触碰课时、凭据、审计或门店隔离约束。