Explorar o código

docs(api): 新增健康方案删除接口文档(API_REFERENCE 4.49)

iwt hai 1 semana
pai
achega
b3c8eb795e
Modificáronse 1 ficheiros con 19 adicións e 0 borrados
  1. 19 0
      docs/superpowers/api/API_REFERENCE.md

+ 19 - 0
docs/superpowers/api/API_REFERENCE.md

@@ -1671,6 +1671,25 @@ interactionType 取值:`PHONE` / `WECHAT` / `MEETING` / `OTHER`。
 
 ---
 
+### 4.49 健康方案删除(`/api/health/plan/delete`、`/api/admin/health-plan/delete`)
+
+已生成的健康方案可删除,**级联删除其产生的全部任务**(含每日实例)。
+
+| 端点 | 权限 | 请求 | 返回 |
+|---|---|---|---|
+| `POST /api/health/plan/delete` | 登录用户(JWT) | `{planId}` | `{planId, taskCount}` |
+| `POST /api/admin/health-plan/delete` | admin/teacher/butler/nutritionist/operator | `{planId}` | `{planId, taskCount}` |
+
+- **级联范围**:`health_plans` 方案行 + `tasks` 中 `source_type='health_plan' AND source_id=planId` 的直接任务(周期模板/一次性任务/购买锚点)+ `tasks` 中 `template_id IN 直接任务ID` 的每日实例(`RepeatTaskGenerator` 生成,只透传 `template_id` 不带 `source_id`,必须二次删除,否则任务删后次日仍被再生产)。
+- **保留不删**:`points_log`(积分流水,已完成任务的积分保留不撤回)、`task_executions` / `growth_task_log`(执行历史)。
+- **事务**:`HealthPlanServiceImpl.deletePlanCascade` 标注 `@Transactional(rollbackFor = Exception.class)`,任一步失败整体回滚,不留无方案的孤儿任务。
+- **IDOR**:用户端接口从 `@RequestAttribute("familyId")` 取家庭做归属校验,方案不属于该家庭返回「无权删除该方案」;管理端传 `familyId=null` 跳过归属校验。
+- **状态**:任何状态(draft/pending_review/published/rejected)均可删除;前端以确认弹窗兜底提醒。
+
+*文档更新:2026-10-17(健康方案级联删除,见 `specs/2026-10-17-health-plan-deletion-design.md`)*
+
+---
+
 *文档最后更新:2026-10-04*
 
 ---