From f08585294370e02bb1c551172da9abf4b9bb4d75 Mon Sep 17 00:00:00 2001 From: richarjiang Date: Sun, 18 Oct 2026 15:52:23 +0800 Subject: [PATCH] docs: record combined production release verification --- docs/combined-release-2026-10-18.md | 39 +++++++++++++++++++++++++++++ docs/lesson-apparatus-feedback.md | 2 +- docs/membership-periods.md | 2 +- 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 docs/combined-release-2026-10-18.md diff --git a/docs/combined-release-2026-10-18.md b/docs/combined-release-2026-10-18.md new file mode 100644 index 0000000..9d37154 --- /dev/null +++ b/docs/combined-release-2026-10-18.md @@ -0,0 +1,39 @@ +# 月卡周期与器械课后评价联合发布 + +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,再核对新增周期状态的读取兼容性;新增字段和枚举值应保留,不能删除上线后产生的新周期或器械评价。完整数据库恢复仅用于灾难恢复,不能覆盖上线后新增的真实业务数据。 + +本次完成数据库迁移和服务端发布,未上传或发布微信小程序。已发布的旧小程序不能自动获得新界面和新的本地续卡预览计算;需发布当前小程序构建,才能使用完整的独立周期展示、提前启用入口和器械评价编辑界面。微信真机键盘、支付和交互验收仍需在新版小程序中完成。 diff --git a/docs/lesson-apparatus-feedback.md b/docs/lesson-apparatus-feedback.md index 5867bdf..4cb2586 100644 --- a/docs/lesson-apparatus-feedback.md +++ b/docs/lesson-apparatus-feedback.md @@ -11,7 +11,7 @@ 新增可空 MySQL JSON 字段 `member_notes.apparatus_notes`,迁移为 `20261018100000_lesson_apparatus_notes`。先在目标环境执行 `pnpm --filter @mp-pilates/server exec prisma migrate deploy`,重新生成 Prisma Client 并部署后端,然后发布小程序。此命令会部署目标库中所有尚未执行的迁移,应按现有发布流程核对。 -本次仅添加迁移文件,未对任何数据库执行迁移。 +本次迁移及服务端改动已与月卡周期功能一并部署生产。发布前纠正了原迁移误用 PostgreSQL JSONB 的问题,并在生产数据库的临时表上验证 MySQL SQL。详见 [联合发布记录](combined-release-2026-10-18.md)。新版小程序尚未上传或发布。 ## 验收 diff --git a/docs/membership-periods.md b/docs/membership-periods.md index 0353682..3346f3b 100644 --- a/docs/membership-periods.md +++ b/docs/membership-periods.md @@ -48,4 +48,4 @@ - shared/server 构建、小程序类型检查和微信小程序生产构建通过。 - `pnpm lint` 无法执行:现有环境未安装脚本引用的 `eslint`;未为此调整依赖或锁文件。 - 使用真实 Vue 页面与模拟数据检查了 390px 宽度下的未过期续卡、已过期续卡、待生效周期列表、提前启用确认及成功后的日期/额度更新;未发起真实支付或修改真实会员权益。 -- 本次月卡迁移及服务端改动尚未部署生产,新版小程序尚未上传或发布。 +- 本次月卡迁移及服务端改动已与器械课后评价一并部署生产;新版小程序尚未上传或发布。详见 [联合发布记录](combined-release-2026-10-18.md)。