Files
mp-pilates/docs/posture-assessment.md
2026-10-18 14:59:48 +08:00

64 lines
6.1 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.
# 会员体测与体态检查表
会员档案 → 成长档案 → 体测 → 新建记录 / 查看 / 编辑。会员自己的成长档案可查看完整记录;新增、修改和删除沿用馆主权限。
## 纸质内容对应
检查项目按用户提供的《体态分析指南 检查表》照片逐项录入。共同定义位于 `packages/shared/src/posture-assessment.ts`,前端与服务端共用,避免选项漂移。
| 分区 | 内容 |
| --- | --- |
| 铅垂线 | 身体各部分与铅垂线相符;头部、胸部和骨盆排列对齐 |
| 侧视图(两侧均需检查) | 踝关节、膝部、髋关节、骨盆、腰椎、下胸椎、上胸椎、颈椎、头部 |
| 正面视图(两侧均需检查) | 足部、膝部、骨盆、肋骨架、肩部、头部;保留「如有必要,可参照后视图加以确认」提示 |
| 后视图(两侧均需检查) | 足部、股骨、骨盆、肩胛骨、肱骨 |
| 循序检查脊柱 | 从侧面观察是否有平直部位及位置;从背后观察并触碰检查是否有失衡部位及位置 |
保留纸上每一行的右/左栏;无左右栏的项目按整体记录。左右始终指会员自身。不同解剖平面的观察可以并存,同一侧中立位与异常、同一平面的相反观察互斥。铅垂线和脊柱问题区分「是」「否」「未检查」,没有自动勾选正常项。脊柱选项从「是」改为「否」或未检查时会清空相应位置。
## 数据与兼容性
- 沿用 `body_metrics`、现有记录 ID、日期、体重、体脂率、腰围、臀围、柔韧度和备注,不删除或重建历史记录。
- 仅新增可空的 `height DOUBLE NULL` 和 `assessment JSON NULL`。历史行无需回填,体态内容为空时显示原始测量,并允许打开详情、编辑和补充检查项。
- `assessment` 使用 `version: 1`、检查行 ID、左右标记、铅垂线和脊柱观察保存。未选项目不推定为正常。
- 所有数值字段及检查项目均可选。至少需要一项测量、检查结果或非空备注,防止误存完全空白的记录。
- 保留 `POST /admin/members/:userId/progress/metrics`;旧客户端无需提交新增字段,仍可保存原有数据。
- 新增 `GET .../metrics/:id`(馆主与会员各自的 progress 路径)和 `PUT /admin/members/:userId/progress/metrics/:id`。读取和修改均限定记录所属会员,会员端仅有读取权限。
- PUT 为整份记录保存:未填写的数值写入 NULL、取消的检查项清空,修改原记录而非新增一条。服务端校验日期、数值范围、检查行、左右标记及互斥约束。
## 发布顺序
1. 使用现有发布流程备份数据库,并在服务端执行 `pnpm --filter @mp-pilates/server exec prisma migrate deploy`,应用 `20261018070000_posture_assessment`。这是仅新增可空列的迁移,原服务仍能使用原字段。
2. 生成 Prisma Client、构建 shared/server 后发布服务端。
3. 构建并发布小程序。旧版小程序在过渡期仍可通过原 POST 接口保存测量,新版可查看和编辑所有历史记录。
没有新环境变量。本地开发不会自动连接生产数据库或执行生产迁移。
## 验证重点
已有会员的旧测量原值展示、旧版请求无需新字段、新增仅体态检查、空数值清除、编辑后不新增副本、左右侧独立、多平面并存、相反结果互斥、记录归属校验、未保存离开提醒、保存失败保留表单,以及返回档案后刷新。
## 生产发布记录(2026-10-18)
按用户授权,将体测功能与此前遗漏的商城「取消取货码、管理员直接完成交付」服务端改动一并发布。商城增加了旧版小程序响应兼容层,避免旧页面缺少取货码而无法提交交付。
- 服务器:沿用 `/usr/local/web/mp-pilates-server`、`/usr/local/web/mp-pilates-shared` 和 PM2 `mp-pilates-server`,Node 22.16.0、Prisma 5.22.0;保留现有环境配置、支付证书和依赖。
- 成功应用 `20260925111500_drop_product_order_pickup_code` 与 `20261018070000_posture_assessment`,生产数据库的 13 个迁移均已完成。
- 采用短暂停服的同步切换,更新 server/shared 构建、schema 和原生 Prisma Client 后重启;PM2 正常在线,没有异常重启,内网和公网健康检查均为 200。
- 对迁移前后记录按 ID 排序并校验完整字段摘要:3 条历史体测原值完全一致;3 条商品订单除被移除的取货码外,其余原值完全一致。历史体测新增字段为 NULL,且数据库列允许 NULL。
- 13 项线上接口检查通过:体测档案和详情读取、会员归属隔离、商城订单列表的旧版兼容码、管理汇总、匿名访问限制、会员管理权限限制和非法分页校验。
- 发布前完整服务端测试为 31 个套件、480 项全部通过;shared/server 构建与小程序类型检查通过。没有创建真实测试订单、扣款或修改历史体测来做验证。
- 发布包 SHA-256:`ad993fe92dd06b43eb4f33963dd3a72642debb5e9c501880c953e05643d1dd4c`。
备份和验证报告仅保存在服务器受限目录 `/usr/local/web/releases/posture-20261018-1792305938060/`:
- `database-before.sql.gz`:完整逻辑备份,gzip 完整性检查通过。
- `previous-build.tgz`、`prisma-client-before/`:旧运行文件、共享包、schema/迁移和生成的 Client。
- `pickup-codes-at-switch.json`:切换时的旧取货码,供必要时精确恢复旧商城版本使用。
- `data-baseline-at-switch.json`、`verification.json`:切换前的数据摘要及发布后的验证报告,不包含访问令牌。
- `release.tgz`、`stage/`:本次发布包及解压后的暂存文件。
回滚旧商城版本时,需要同时恢复旧 `pickup_code` 列及对应值、旧运行文件和 Prisma Client,并核对迁移元数据,不能仅重启旧构建。体测新增的可空列可保留。完整数据库恢复用于灾难恢复,正常回滚不得覆盖上线后产生的新数据。
本次仅发布服务端。新的体测界面与商城发货界面仍需随小程序新版发布;已发布的小程序通过服务端兼容层继续使用。