Files
mp-pilates/docs/combined-release-2026-10-18.md
2026-10-18 15:52:23 +08:00

40 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 月卡周期与器械课后评价联合发布
2026-10-18 按用户授权提交工作目录代码,执行两个需求的生产数据库迁移、服务端发布与质量核验。
## 代码与构建
- 代码提交:`a3d58fa`(`feat: add monthly card periods and apparatus lesson feedback`)。包含月卡独立周期、提前启用、预约周期校验,以及 M、R、TT、Chair、ARC、SC、LB 选填课后评价。
- 完整服务端测试:34 个套件、545 项全部通过。shared/server 构建、小程序类型检查和微信小程序生产构建通过;`git diff --check` 通过。
- `pnpm lint` 因现有环境未安装脚本引用的 ESLint 无法执行;未因此修改项目依赖。
- 发布包 SHA-256:`7e3f6fe47409957c83f326684cb549336d7be75c0ae646827748ac9e682e8efd`,上传前后校验一致。
## 迁移与服务切换
- 继续使用 `/usr/local/web/mp-pilates-server`、`/usr/local/web/mp-pilates-shared` 和 PM2 `mp-pilates-server`,沿用 Node 22.16.0、Prisma 5.22.0 及现有依赖、环境配置和支付证书。
- 发布前将器械评价迁移中的 PostgreSQL `JSONB` 改为 MySQL `JSON NULL`;两条迁移均已在生产库临时表上预演。
- 成功应用 `20261018090000_scheduled_membership_periods` 和 `20261018100000_lesson_apparatus_notes`。全部 15 个迁移完成,`prisma migrate status` 确认数据库为最新状态;另有一条旧迁移的历史回滚记录,未作修改。
- 月卡状态只在数据库枚举末尾追加 `SCHEDULED`;器械字段新增为可空 JSON。旧记录不重建,不批量清零或修改历史权益。
- 短暂停服后记录数据摘要、迁移、同步 server/shared、重新生成原生 Prisma Client 并重启服务。内网及公网 HTTPS 健康检查均为 200,PM2 在线且未发生异常重启;本次启动后进程错误日志未增长。运行目录与已校验发布包逐文件比较一致。
## 数据与线上验证
- 切换前后按 ID 排序比较原始字段摘要:20 条会员卡、4 条教练笔记、7 条体测、155 条预约、203 条购卡订单、3 条商品订单、58 个用户和 6 个卡类型均保持一致;`.env` 摘要一致。新字段在 4 条旧笔记中均为 NULL。
- 58 项线上及真实 MySQL 检查通过,包括会员权益读取、原有评价内容与共享状态、私密评价隔离、匿名/会员/管理员权限、提前启用显式确认、周期归属、空评价与非法器械参数拦截。
- 隔离的可回滚集成事务验证:月卡 6 次与新购 10 次独立保存、连续购买排期、旧余额留存、余次未用完时拒绝提前启用、用完后完整周期提前生效与后续顺延、过期月卡可用余次为 0、次卡仍累加为 16 次、七项器械及单项无整体评价存取、私密/共享可见性。
- 所有集成测试写入均在事务中主动回滚,并核对未留下测试用户、卡类型、会员卡或评价。未发起真实支付、通知或修改真实会员权益。
## 备份与回退
备份及核验资料仅存于生产服务器受限目录 `/usr/local/web/releases/combined-20261018-1792309575767/`:
- `database-before.sql.gz`:完整数据库逻辑备份,gzip 完整性检查通过。
- `previous-build.tgz`、`prisma-client-before/`:切换前 server/shared、schema、迁移和 Prisma Client。
- `preflight.json`、`data-baseline-at-switch.json`、`data-verification.json`:迁移预演、原始数据摘要及逐表比较结果。
- `smoke-verification.json`、`health-after.json`:线上与回滚事务检查、健康检查结果,不保存访问令牌。
- `release.tgz`、`stage-clean/`、迁移和启动日志:本次运行文件及执行记录。
需要应用回退时,应停止服务并同时恢复旧 server/shared 和原 Prisma Client,再核对新增周期状态的读取兼容性;新增字段和枚举值应保留,不能删除上线后产生的新周期或器械评价。完整数据库恢复仅用于灾难恢复,不能覆盖上线后新增的真实业务数据。
本次完成数据库迁移和服务端发布,未上传或发布微信小程序。已发布的旧小程序不能自动获得新界面和新的本地续卡预览计算;需发布当前小程序构建,才能使用完整的独立周期展示、提前启用入口和器械评价编辑界面。微信真机键盘、支付和交互验收仍需在新版小程序中完成。