Files
mp-pilates/docs/lesson-supplement.md
2026-09-08 15:08:29 +08:00

2.8 KiB
Raw Blame History

历史课程补录

入口:会员档案 → 上课情况 → 补录上课。一次填写 1999 节,可备注,默认仅补记录,也可选择本人有限次会员卡扣次(含已过期卡)。不限次卡无需扣次;余额不足阻止提交。

一批补录展示为「系统补录 · N 节」,不是 N 个虚拟预约。累计已上课次数(个人中心、会员档案、会员列表已完成)增加 N累计预约、月度节数/天数/时长、最近 30 天网格、邀请奖励保持正常预约口径,因为补录没有真实上课日期。记录时间明确为补录时间。

老师与管理员共用 ADMIN 权限;成员只能读取自己的生效记录。事务保存记录与扣次快照,请求标识唯一,网络重试不重复扣次。撤销软删除,保留操作人与时间,只返还当时实际扣次,过期卡不重新激活。若原卡已转为不限次,撤销阻止并要求先核对卡状态。

迁移与发布

新增 lesson_supplements 表及关联索引,不修改既有预约数据。按仓库发布流程先执行 prisma migrate deploy 并重新生成 Prisma Client、发布后端再发布小程序。开发检查不自动触及生产数据库。

回退:先回退应用代码,保留新增表即可,旧代码不读取该表。若一定要移除表,须先导出审计数据并核对已扣会员卡余额;仅在未写入任何补录的环境可执行 DROP TABLE lesson_supplements;。MySQL DDL 不能靠事务回滚,不在生产自动执行删除。

本次验证

  • 补录与用户统计相关 62 项测试通过,覆盖权限、数量校验、仅补记录、扣次、余额不足、过期卡、重复提交、并发冲突、撤销和统计口径。
  • 共享包与后端构建、小程序构建、vue-tsc、Prisma schema 校验通过。
  • 使用真实 Vue 页面与示例接口检查 375/320 宽度布局、十节补录、撤销、余额不足及学员历史记录;不替代微信真机与真实数据库联调。
  • 全量测试存在原有 SchedulerService 测试依赖缺失:未提供 FlashSaleService8 项失败;其余已执行用例通过。
  • 2026-09-08 已经用户授权执行生产迁移及后端发布;小程序仍需单独发布。

生产发布记录2026-09-08

  • 执行 pnpm deploy:server,迁移 20260908090000_add_lesson_supplements 成功,全部 4 个迁移处于最新状态。
  • 发布前数据库及后端备份保存在服务器 /usr/local/web/mp-pilates-backups/20260908-145852/
  • 新表读取成功,验收时为 0 条记录;未创建测试补录或修改学员余额。
  • 内网及公网 https://focus.richarjiang.com/api/health 均返回 success: truestatus: okPM2 mp-pilates-server 为 online重启计数为 0。
  • 部署脚本增加远端 set -e,使依赖安装或迁移失败时停止发布。