Plan Instances API
計畫實例 — 選手報名訓練計畫後的個人化執行實例。
概念
當選手「報名」一個訓練計畫時,系統會建立一個 Plan Instance(計畫實例)。
- Training Plan(模板):教練建立的課表模板,可重複使用
- Plan Instance(實例):選手報名後的個人化版本,包含開始日期和進度
POST /training/plan_instances
報名訓練計畫(建立實例)。
Headers
| Header | 值 | 必填 |
|---|---|---|
| `x-api-key` | API Key | ✅ |
Request Body
| 參數 | 類型 | 必填 | 說明 |
|---|---|---|---|
| `training_plan_id` | string | ✅ | 訓練計畫模板 ID |
| `start_date` | string | ✅ | 開始日期(YYYY-MM-DD) |
| `user_id` | string | ❌ | 使用者 ID(教練代為報名時使用) |
Response (201)
{"plan_instance_id": "abc123", "message": "Enrolled successfully"}
報名流程
1. 系統根據 start_date 和計畫的 weeks/days_per_week 計算每天的課表日期
2. 為每天建立 scheduled activity(計畫活動)
3. 計畫活動出現在選手的首頁和行事曆
4. 如果選手連接了 Garmin,結構化課表會自動推送到手錶
POST /training/plans/{plan_id}/activity
為計畫新增活動(手動新增課表到某一天)。
Request Body
| 參數 | 類型 | 必填 | 說明 |
|---|---|---|---|
| `date` | string | ✅ | 日期(YYYY-MM-DD) |
| `workout_name` | string | ✅ | 課表名稱 |
| `workout_type` | string | ✅ | 課表類型 |
POST /training/plans/{plan_id}/delete
刪除計畫實例(取消報名)。
注意:使用 POST 而非 DELETE,因為刪除計畫需要處理已完成的活動連結。