# 運動紀錄 --- - 常數定義 - [運動類型基礎](#運動類型基礎) - [運動模式](#運動模式) - [運動紀錄狀態](#運動紀錄狀態) - [運動紀錄目標類型](#運動紀錄目標類型) - [運動紀錄資料來源](#運動紀錄資料來源) - [運動紀錄Summary查詢類別](#運動紀錄Summary查詢類別) - API 清單 - [取得運動模式列表](#取得運動模式列表) - [查詢用戶運動紀錄含軌跡資訊](#查詢用戶運動紀錄含軌跡資訊) - [根據target查詢運動紀錄總覽](#根據target查詢運動紀錄總覽) - [取得我當前運動紀錄](#取得我當前運動紀錄) - [觸發活動紀錄](#觸發活動紀錄) - [上傳活動軌跡](#上傳活動軌跡) - [暫停運動紀錄](#暫停運動紀錄) - [結束運動紀錄](#結束運動紀錄) - [編輯運動紀錄(其他)](#編輯運動紀錄其他) - [取得運動紀錄列表(Web端)](#取得運動紀錄列表Web端) - [取得運動紀錄列表(App端)](#取得運動紀錄列表App端) - [取得運動紀錄配速](#取得運動紀錄配速) - [取得運動紀錄Summary](#取得運動紀錄Summary) - [設定目標步數](#設定目標步數) - [取得建議步數](#取得建議步數) - [新增跑步紀錄(SportRun)](#新增跑步紀錄SportRun) - [查詢跑步紀錄(SportRun)](#查詢跑步紀錄SportRun) - [新增30分鐘健康紀錄](#新增30分鐘健康紀錄) - [查詢30分鐘健康紀錄](#查詢30分鐘健康紀錄) - [查詢30分鐘健康紀錄區間內平均結果](#查詢30分鐘健康紀錄區間內平均結果) - [新增每日總步數紀錄(DailySteps)](#新增每日總步數紀錄DailySteps) - [查詢每日總步數紀錄(DailySteps)](#查詢每日總步數紀錄DailySteps) --- ## 常數定義 ### 運動類型基礎 欄位 | 型態 | 說明 ---|---|--- basedType | string | 運動類型基礎, DISTANCE_BASED: 距離制, TIME_BASED: 計時制 ### 運動模式 欄位 | 型態 | 說明 ---|---|--- sportMod | string | 運動模式, WALK:走路, RUN:跑步, BIKE:腳踏車, STAIRS:爬樓梯, AEROBIC:有氧運動, ROPE:跳繩, YOGA:瑜珈, GOLF:高爾夫球, TENNIS:網球, SOFTBALL:壘球, BASEBALL:棒球, FOOTBALL:足球, BASKETBALL:籃球, VOLLEYBALL:排球, SWIMMING:游泳, BADMINTON:羽球, BADMINTON_MATCH:競賽羽球, WEIGHT_TRAINING:重量訓練, OTHER:其他 ### 運動紀錄狀態 欄位 | 型態 | 說明 ---|---|--- status | string | 運動紀錄狀態, RECORDING:紀錄中, PAUSE:暫停, FINISH:結束 ### 運動紀錄目標類型 欄位 | 型態 | 說明 ---|---|--- targetType | string | 運動紀錄目標類型, LOYALTY:定位集點, SPORT:運動記錄, LOYALTY_SPORT:集點任務, UCAREMEDI:宇康上傳 ### 運動紀錄資料來源 欄位 | 型態 | 說明 ---|---|--- dataSource | string | LOYALTY:定位集點, LOYALTY_SPORT:集點任務, MANUAL:手動記錄, DEVICE:裝置, IOS_HEALTH:iOS健康, GOOGLE_FIT:Google Fit, UCAREMEDI:宇康, OTHER:其他 ### 運動紀錄Summary查詢類別 欄位 | 型態 | 說明 ---|---|--- queryType | string | DAILY:天, WEEKLY:週, MONTHLY:月 --- # API 清單 ## 取得運動模式列表 ```url POST /sport-track/sport-mod/list ``` * 權限: App使用者及Web端使用者 ### Request-取得運動模式列表 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- ### Response-取得運動模式列表 欄位 | 型態 | 說明 --- | --- | --- name | string | 運動模式名稱 description | string | 運動模式說明 basedType | string | 運動類型基礎, 參閱 [運動類型基礎](#運動類型基礎) met | double | 此運動模式的代謝當量, 用來計算運動消耗熱量 ```javascript { "httpCode": 200, "result": { "data": [ { "name": "BIKE", "description": "腳踏車", "basedType": "DISTANCE_BASED", "met": 7.5 }, { "name": "STAIRS", "description": "爬樓梯", "basedType": "TIME_BASED", "met": 6 }, ... ] } } ``` ## 查詢用戶運動紀錄含軌跡資訊 ```url POST /sport-track/record/query ``` - webview使用, 不須帶token - 查詢用戶在定位集點卡的軌跡紀錄, 可查所有集點卡或是當前集點卡軌跡 ### Request-查詢用戶運動紀錄含軌跡資訊 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- targetType | string | Y | 20 | | 運動紀錄目標類型 [運動紀錄目標類型](#運動紀錄目標類型) target | string | Y(targetType=LOYALTY) | 36 | | 目標ID. targetType: LOYALTY, 對應到loyalty_card_task.id householdMemberId | string | Y | 36 | | 用戶ID partId | int | | | | 軌跡分段序號(集點卡序號)<BR> targetType=LOYALTY 時, partId和recordId都不填, 顯示最新集點卡的軌跡記錄<BR>recordId: null, 顯示該集點卡的所有軌跡 recordId | string | | 36 | | 運動紀錄ID <BR> targetType=SPORT 時, 必需填入recordId, <BR>targetType=LOYALTY 時, partId和recordId都不填, 則顯示最新集點卡的軌跡記錄<BR>partId: null, 顯示該運動紀錄的所有軌跡 ```javascript { "targetType": "LOYALTY", "target": "9acb3da6-99d6-47a2-8fb8-73d22bda893e", "householdMemberId": "8a9e980a-c612-4f87-af07-a97a5f0fbed5", "partId": 1, "recordId": null } ``` ### Error-查詢用戶運動紀錄含軌跡資訊 httpCode | 錯誤碼 | 說明 --- | --- | --- ### Response-查詢用戶運動紀錄含軌跡資訊 欄位 | 型態 | 說明 --- | --- | --- id | string | 運動紀錄id sportMod | string | 運動類型, 參閱 [運動模式](#運動模式) status | string | 運動紀錄狀態, 參閱 [運動紀錄狀態](#運動紀錄狀態) householdMemberId | string | 用戶ID targetType | string | 運動紀錄目標類型, 參閱 [運動紀錄目標類型](#運動紀錄目標類型) target | string | 目標ID. targetType: LOYALTY, 對應到loyalty_card_task.id sportStartTime|timestamp|運動紀錄開始時間 createTime | timestamp | 建立日期時間 updateTime | timestamp | 更新日期時間 markers|json array| 定位集點的座標點和達標狀態 partInfo|json object| 軌跡分段資訊 goalDuration | int | 運動目標時間, 單位:秒 goalDistance | double | 運動目標距離, 單位:公尺(m) latestPace | int | 最近的配速值, 單位:秒 #### Response-查詢用戶運動紀錄含軌跡資訊-markers (json object) 欄位 | 型態 | 說明 --- | --- | --- latitude | string | 緯度, 範圍-90~90. 取道小數點下五位 longitude | string | 經度, 範圍-180~180. 取道小數點下五位 archived | boolean | 是否已完成集點 seq|int|點位序號 #### Response-查詢用戶運動紀錄含軌跡資訊-partInfo (json object) 欄位 | 型態 | 說明 --- | --- | --- partId | string | 軌跡分段序號, 對應到集點卡流水號 distance | double | 該分段的總距離, 單位公尺 spendTime | int | 該分段的總花費時間, 單位秒 seq|int| 點位序號 tracks|json array| 該分段的所有軌跡資訊 #### Response-查詢用戶運動紀錄含軌跡資訊-tracks (json object) 欄位 | 型態 | 說明 --- | --- | --- latitude | string | 緯度, 範圍-90~90. 取道小數點下五位 longitude | string | 經度, 範圍-180~180. 取道小數點下五位 ```javascript { "httpCode": 200, "result": { "data": { "id": "137e732b-7488-4b28-baed-5f077ef96c7e", "sportMod": "RUN", "status": "RECORDING", "householdMemberId": "8a9e980a-c612-4f87-af07-a97a5f0fbed5", "targetType": "LOYALTY", "target": "9acb3da6-99d6-47a2-8fb8-73d22bda893e", "createTime": 1677819889416, "updateTime": 1677819889416, "sportStartTime": 1677819889461, "goalDuration": null, "goalDistance": null, "markers": [ { "latitude": "-76.1", "longitude": "99.37777", "archived": false, "seq": 1 }, { "latitude": "-56.1", "longitude": "129.37777", "archived": false, "seq": 2 } ], "partInfo": { "partId": "1", "distance": 2.67, "spendTime": 10000, "tracks": [ [ { "latitude": "-76.1", "longitude": "99.47787" }, { "latitude": "-76.1", "longitude": "99.47797" } ] ] }, "latestPace": null } } } ``` ## 根據target查詢運動紀錄總覽 ```url POST /sport-track/record/summary ``` - 在集點卡地圖任務集點時叫用 - 查詢用戶在特定定位集點卡的軌跡紀錄資訊 ### Request-根據target查詢運動紀錄總覽 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- targetType | string | Y | 20 | | 運動紀錄目標類型 [運動紀錄目標類型](#運動紀錄目標類型) target | string | Y(targetType=LOYALTY) | 36 | | 目標ID. targetType: LOYALTY, 對應到loyalty_card_task.id partId | int | | | | 軌跡分段序號, 定位集點卡集點卡序號. 第一張集點卡, partId:1. 以此類推 ```javascript { "targetType": "LOYALTY", "target": "9acb3da6-99d6-47a2-8fb8-73d22bda893e", "partId": 1 } ``` ### Error-根據target查詢運動紀錄總覽 httpCode | 錯誤碼 | 說明 --- | --- | --- ### Response-根據target查詢運動紀錄總覽 欄位 | 型態 | 說明 --- | --- | --- targetType | string | 運動紀錄目標類型, 參閱 [運動紀錄目標類型](#運動紀錄目標類型) target | string | 目標ID. targetType: LOYALTY, 對應到loyalty_card_task.id startTime|timestamp|集點卡紀錄開始時間 endTime | timestamp | 集點卡紀錄結束時間 distance | double | 該集點卡的總距離, 單位公尺 spendTime | int |該集點卡的總花費時間, 單位秒 sportRecords|json array|該集點卡的所有運動紀錄 #### Response-根據target查詢運動紀錄總覽-sportRecords (json object) 欄位 | 型態 | 說明 --- | --- | --- id|string|運動紀錄id, 可以帶給webview顯示該運動紀錄的所有軌跡 sportMod | string | 運動類型, 參閱 [運動模式](#運動模式) distance | double | 該紀錄的總距離, 單位公尺 spendTime | int |該紀錄的總花費時間, 單位秒 startTime|timestamp|運動紀錄開始時間 endTime | timestamp | 運動紀錄結束時間 ```javascript { "httpCode": 200, "result": { "data": { "targetType": "LOYALTY", "target": "70be33cd-76e4-4d2d-8e06-a4f40665ce45", "startTime": 1678346603508, "distance": 3570.4300000000003, "spendTime": 4981000, "sportRecords": [ { "id": "33849fff-8a82-4372-9feb-d82e61438e7f", "sportMod": "WALK", "startTime": 1678430913432, "distance": 645.07, "spendTime": 967000 }, { "id": "1518eec6-69f4-492d-bd68-31abbb72f02c", "sportMod": "BIKE", "startTime": 1678344575018, "endTime": 1678344892084, "distance": 195.03, "spendTime": 245000 },... ] } } } ``` ## 取得我當前運動紀錄 ```url GET /sport-track/my-record ``` - 取得用戶最新一筆運動紀錄, 可用來決定接下來要記錄,暫停還是結束, 以建立時間降冪排序 - 返回結果另外加入未結束的運動紀錄 ### Request-取得我當前運動紀錄 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- ### Error-取得我當前運動紀錄 httpCode | 錯誤碼 | 說明 --- | --- | --- ### Response-取得我當前運動紀錄 欄位 | 型態 | 說明 --- | --- | --- id | string | 運動紀錄id sportMod | string | 運動類型, 參閱 [運動模式](#運動模式) status | string | 運動紀錄狀態, 參閱 [運動紀錄狀態](#運動紀錄狀態) householdMemberId | string | 用戶ID targetType | string | 運動紀錄目標類型, 參閱 [運動紀錄目標類型](#運動紀錄目標類型) target | string | 目標ID. targetType: LOYALTY, 對應到loyalty_card_task.id sportStartTime|timestamp|運動紀錄開始時間 createTime | timestamp | 建立日期時間 updateTime | timestamp | 更新日期時間 sportDistance | double | 運動距離, 單位為公尺(m) sportDuration | int | 運動時間長度, 單位為秒(seconds) kcal | int | 運動消耗的卡路里 goalDistance | double | 運動目標距離, 單位:公尺(m) goalDuration | int | 運動目標時間, 單位:秒(seconds) dataSource | string | 運動紀錄資料來源, [運動紀錄資料來源](#運動紀錄資料來源) notFinishList | json array | 未結束的運動紀錄列表 sportModOther | string | 其他運動項目, sportMod=OTHER時可查看此欄位是何種運動 ### Response-取得我當前運動紀錄-notFinishList-json 參閱 [Response-取得我當前運動紀錄](#Response-取得我當前運動紀錄) ```javascript // 無運動紀錄 // { "httpCode": 200, "result": { "data": {} } } // 有運動紀錄 { "httpCode": 200, "result": { "data": { "id": "9d718fdb-d620-4197-ae80-26ea9ffcb6f8", "sportMod": "RUN", "status": "RECORDING", "householdMemberId": "8a9e980a-c612-4f87-af07-a97a5f0fbed5", "targetType": "LOYALTY", "target": "9acb3da6-99d6-47a2-8fb8-73d22bda893e", "createTime": 1677813479035, "updateTime": 1677813479035, "sportStartTime": 1677813479452, "notFinishList": [ {...} ] } } } ``` ## 觸發活動紀錄 ```url POST /sport-track/record ``` * 活動紀錄(targetType=LOYALTY) - 新增或繼續紀錄(RECORDING)/暫停(PAUSE)/結束(FINISH) * 運動紀錄(targetType=SPORT) - 新增或繼續紀錄(RECORDING)運動紀錄時, 呼叫此API - 暫停(PAUSE)運動紀錄時, 請呼叫 [暫停運動紀錄 /sport-track/pause](#暫停運動紀錄) - 結束(FINISH)運動紀錄時, 請呼叫 [結束運動紀錄 /sport-track/finish](#結束運動紀錄) * 新增其他運動紀錄(targetType=SPORT, sportMod=OTHER)時也是呼叫此API - sportMod=OTHER, sportModOther必填, 說明是何運動項目 - sportData必填, 運動持續時間(sportDuration), 運動距離(sportDistance), 卡路里(sportKcal)三個欄位必需至少填一項 - 其他運動記錄狀態只能為FINISH - 運動(開始/結束)時間(sportTime)必填 ### Request-觸發活動紀錄 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- sportMod | string | Y | 15 | | 運動類型 [運動模式](#運動模式) status | string | Y | 15 | | 運動紀錄狀態 [運動紀錄狀態](#運動紀錄狀態) targetType | string | Y | 20 | | 運動紀錄目標類型 [運動紀錄目標類型](#運動紀錄目標類型) target | string | Y(targetType=LOYALTY) | 36 | | 目標ID. targetType: LOYALTY, 對應到loyalty_card_task.id createNewTrackPart | boolean | Y(targetType=LOYALTY) | | | 該筆運動紀錄是否對應新的集點卡<BR>該集點卡尚未完成任何集點時本欄位需要填上true recordId | string | | 36 | | 運動紀錄id, targetType=SPORT 時, 要 繼續紀錄(RECORDING)/暫停(PAUSE)/結束(FINISH) 運動紀錄時, 需填入recordId<BR/>若未填入, 則會將未結束的相同運動模式運動紀錄結束再新增運動紀錄 goalDuration | int | | | | 目標時間, 單位:秒, 新增一般運動紀錄時, 運動類型為距離類型時填入 goalDistance | double | | | | 目標距離, 單位:公尺(m), 新增一般運動紀錄時, 運動類型為計時類型時填入 sportModOther | string | Y(sportMod=OTHER) | 100 | | 其他運動項目, 當sportMod=OTHER時必填 sportTime | timestamp | Y(sportMod=OTHER) | | | 運動(開始/結束)時間(sportTime), 當sportMod=OTHER時必填 sportData | json | Y(sportMod=OTHER) | | | 運動統計json, 當sportMod=OTHER時必填, 運動持續時間(sportDuration), 運動距離(sportDistance), 卡路里(sportKcal)三個欄位必需至少填一項 ### Request-觸發活動紀錄-sportData(json) 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- sportDistance | double | | | | 運動距離, 單位為公尺(m) sportDuration | int | | | | 運動時間長度, 單位為秒(seconds) sportKcal | int | | | | 運動消耗的卡路里, 單位:千卡 ```javascript { "sportMod": "RUN", "status": "RECORDING", "targetType": "LOYALTY", "target": "071b07dc-0b63-4282-9732-eb10bc44376e", "createNewTrackPart": true, "recordId": null, "goalDuration": null, "goalDistance": null, "sportModOther": null, "sportTime": null, "sportData": null, } ``` ### Error-觸發活動紀錄 httpCode | 錯誤碼 | 說明 --- | --- | --- 422 | SERVICE_ERROR.SPORT_RECORD_STATUS_ERROR | 運動紀錄的狀態切換錯誤.<BR> RECORDING只能切換為PAUSE/FINISH<BR>PAUSE只能切換為RECORDING/FINISH ### Response-觸發活動紀錄 欄位 | 型態 | 說明 --- | --- | --- id | string | 運動紀錄id sportMod | string | 運動類型, 參閱 [運動模式](#運動模式) status | string | 運動紀錄狀態, 參閱 [運動紀錄狀態](#運動紀錄狀態) householdMemberId | string | 用戶ID targetType | string | 運動紀錄目標類型, 參閱 [運動紀錄目標類型](#運動紀錄目標類型) target | string | 目標ID. targetType: LOYALTY, 對應到loyalty_card_task.id optionInfo | string | 本次運動紀錄的附屬資訊, 請附加在 上傳軌跡紀錄 API內 createTime | timestamp | 建立日期時間 updateTime | timestamp | 更新日期時間 sportDistance | double | 運動距離, 單位為公尺(m) sportDuration | int | 運動時間長度, 單位為秒(seconds) kcal | int | 運動消耗的卡路里 goalDistance | double | 運動目標距離, 單位:公尺(m) goalDuration | int | 運動目標時間, 單位:秒(seconds) dataSource | string | 運動紀錄資料來源, 參閱[運動紀錄資料來源](#運動紀錄資料來源) sportModOther | string | 其他運動項目, sportMod=OTHER時可查看此欄位是何種運動 ```javascript { "httpCode": 200, "result": { "data": { "id": "526808c0-4112-49fd-a6d2-ab2ebd19a486", "sportMod": "RUN", "status": "RECORDING", "householdMemberId": "8a9e980a-c612-4f87-af07-a97a5f0fbed5", "targetType": "LOYALTY", "target": "071b07dc-0b63-4282-9732-eb10bc44376e", "createTime": 1676895957113, "updateTime": 1676895957113, "optionInfo": "[{\"id\":\"f1dbf8cf-cbb2-45fe-983f-16a15fa52d13\",\"seq\":1,\"latitude\":\"-9.1\",\"longitude\":\"-179.37777\"},{\"id\":\"1ab88565-7e94-48e5-9375-d2828340e75b\",\"seq\":2,\"latitude\":\"-51.1\",\"longitude\":\"129.37777\"},{\"id\":\"7401aa85-eab1-4cd6-819c-6203a57a55b8\",\"seq\":3,\"latitude\":\"-31.1\",\"longitude\":\"129.37777\"}]", "dataSource": "LOYALTY" } } } ``` ## 上傳活動軌跡 ```url POST /sport-track/add ``` - 軌跡座標取樣頻率目前暫訂三秒取一點(未來會根據不同運動類型在運動紀錄那邊提供動態取樣頻率) - 每次上傳軌跡列表至少兩點以上, 以便計算距離 ### Request-上傳活動軌跡 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- optionInfo | string | Y | 5000 | | 運動紀錄的附屬資訊, 請透過 sport-track/record 取得 targetType | string | Y | 20 | | 運動紀錄目標類型 [運動紀錄目標類型](#運動紀錄目標類型) target | string | Y | 36 | | 目標ID. targetType: LOYALTY, 對應到loyalty_card_task.id trackList | json array | Y | | | 軌跡座標列表, 至少需要有2個座標點 recordId | string | Y(targetType=SPORT) | 36 | | 運動記錄id, targetType=SPORT 時, 需填入recordId才能新增軌跡紀錄 #### Request-上傳活動軌跡-軌跡座標 (json object) 欄位 | 型態 | 說明 --- | --- | --- lat | string | 緯度, 範圍-90~90. 取道小數點下五位 lng | string | 經度, 範圍-180~180. 取道小數點下五位 timeFlag | timestamp | 座標取樣的時間戳記 ```javascript { "optionInfo": "[{\"id\":\"f1dbf8cf-cbb2-45fe-983f-16a15fa52d13\",\"seq\":1,\"latitude\":\"-9.1\",\"longitude\":\"-179.37777\"},{\"id\":\"1ab88565-7e94-48e5-9375-d2828340e75b\",\"seq\":2,\"latitude\":\"-51.1\",\"longitude\":\"129.37777\"},{\"id\":\"7401aa85-eab1-4cd6-819c-6203a57a55b8\",\"seq\":3,\"latitude\":\"-31.1\",\"longitude\":\"129.37777\"}]", "targetType": "LOYALTY", "target": "071b07dc-0b63-4282-9732-eb10bc44376e", "trackList": [ { "lat": -41.1, "lng": 129.37776, "timeFlag": 1676289350949 }, { "lat": -41.1, "lng": 129.37776, "timeFlag": 1676289350949 }, ], "recordId": null } ``` ### Error-上傳活動軌跡 httpCode | 錯誤碼 | 說明 --- | --- | --- 422 | SERVICE_ERROR.SPORT_RECORD_NO_SPORT_RECORDING | 目前運動紀錄的狀態並非"RECORDING" ### Response-上傳活動軌跡 欄位 | 型態 | 說明 --- | --- | --- id | string | 軌跡紀錄id partId | string | 軌跡分段編號 recordId | string | 運動紀錄ID startPoint | json string | 軌跡的起點座標 endPoint | json string | 軌跡的結束點座標 allPoints | json string | 軌跡的所有座標點 isActive | boolean | 該段軌跡是否還能繼續記錄 createTime | timestamp | 建立日期時間 updateTime | timestamp | 更新日期時間 ```javascript { "httpCode": 200, "result": { "data": [ { "id": "9f75d2fe-ff01-4ebc-96d2-bb73d708c8db", "partId": "4", "recordId": "526808c0-4112-49fd-a6d2-ab2ebd19a486", "startPoint": "{\"lat\":\"-41.3\",\"lng\":\"129.37776\",\"timeFlag\":\"Feb 13, 2023 7:55:50 PM\"}", "endPoint": "{\"lat\":\"-41.3\",\"lng\":\"129.37776\",\"timeFlag\":\"Feb 13, 2023 7:55:50 PM\"}", "allPoints": "[{\"lat\":\"-41.3\",\"lng\":\"129.37776\",\"timeFlag\":\"Feb 13, 2023 7:55:50 PM\"},{\"lat\":\"-4.1\",\"lng\":\"-179.37765\",\"timeFlag\":\"Feb 13, 2023 7:55:50 PM\"},{\"lat\":\"-41.1\",\"lng\":\"129.37776\",\"timeFlag\":\"Feb 13, 2023 7:55:50 PM\"},{\"lat\":\"-41.1\",\"lng\":\"129.37776\",\"timeFlag\":\"Feb 13, 2023 7:55:50 PM\"},{\"lat\":\"-41.3\",\"lng\":\"129.37776\",\"timeFlag\":\"Feb 13, 2023 7:55:50 PM\"},{\"lat\":\"-4.1\",\"lng\":\"-179.37765\",\"timeFlag\":\"Feb 13, 2023 7:55:50 PM\"},{\"lat\":\"-41.1\",\"lng\":\"129.37776\",\"timeFlag\":\"Feb 13, 2023 7:55:50 PM\"},{\"lat\":\"-41.1\",\"lng\":\"129.37776\",\"timeFlag\":\"Feb 13, 2023 7:55:50 PM\"},{\"lat\":\"-41.3\",\"lng\":\"129.37776\",\"timeFlag\":\"Feb 13, 2023 7:55:50 PM\"},{\"lat\":\"-4.1\",\"lng\":\"-179.37765\",\"timeFlag\":\"Feb 13, 2023 7:55:50 PM\"},{\"lat\":\"-41.1\",\"lng\":\"129.37776\",\"timeFlag\":\"Feb 13, 2023 7:55:50 PM\"},{\"lat\":\"-41.1\",\"lng\":\"129.37776\",\"timeFlag\":\"Feb 13, 2023 7:55:50 PM\"},{\"lat\":\"-41.3\",\"lng\":\"129.37776\",\"timeFlag\":\"Feb 13, 2023 7:55:50 PM\"}]", "createTime": 1676950621103, "updateTime": 1677051306612, "isActive": true } ] } } ``` ## 暫停運動紀錄 ```url POST /sport-track/pause ``` * 要暫停運動記錄時, 請call 此API ### Request-暫停運動紀錄 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- recordId | string | Y | 36 | | 運動紀錄id sportData | json | | | | 本次運動的數據, 若有帶值, 會以此數據當成本筆運動記錄的運動時間, 距離, 卡路里, 若為null, 則由後端自動計算 ### Request-暫停運動紀錄-sportData(json) 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- sportDistance | double | | | | 運動距離, 單位為公尺(m) sportDuration | int | | | | 運動時間長度, 單位為秒(seconds) sportKcal | int | | | | 運動消耗的卡路里, 單位:千卡 ```javascript { "recordId": "071b07dc-0b63-4282-9732-eb10bc44376e", "sportData": { "sportDistance": null, "sportDuration": null, "sportKcal": null } } ``` ### Error-暫停運動紀錄 httpCode | 錯誤碼 | 說明 --- | --- | --- 422 | SERVICE_ERROR.SPORT_RECORD_STATUS_ERROR | 運動紀錄的狀態切換錯誤.<BR> RECORDING只能切換為PAUSE/FINISH<BR>PAUSE只能切換為RECORDING/FINISH ### Response-暫停運動紀錄 欄位 | 型態 | 說明 --- | --- | --- id | string | 運動紀錄id sportMod | string | 運動類型, 參閱 [運動模式](#運動模式) status | string | 運動紀錄狀態, 參閱 [運動紀錄狀態](#運動紀錄狀態) householdMemberId | string | 用戶ID targetType | string | 運動紀錄目標類型, 參閱 [運動紀錄目標類型](#運動紀錄目標類型) target | string | 目標ID. targetType: LOYALTY, 對應到loyalty_card_task.id optionInfo | string | 本次運動紀錄的附屬資訊, 請附加在 上傳軌跡紀錄 API內 createTime | timestamp | 建立日期時間 updateTime | timestamp | 更新日期時間 sportDistance | double | 運動距離, 單位為公尺(m) sportDuration | int | 運動時間長度, 單位為秒(seconds) kcal | int | 運動消耗的卡路里 goalDistance | double | 運動目標距離, 單位:公尺(m) goalDuration | int | 運動目標時間, 單位:秒(seconds) dataSource | string | 運動紀錄資料來源, 參閱[運動紀錄資料來源](#運動紀錄資料來源) ```javascript { "httpCode": 200, "result": { "data": { "id": "526808c0-4112-49fd-a6d2-ab2ebd19a486", "sportMod": "RUN", "status": "PAUSE", "householdMemberId": "8a9e980a-c612-4f87-af07-a97a5f0fbed5", "targetType": "SPORT", "target": null, "createTime": 1676895957113, "updateTime": 1676895957113, "optionInfo": "", "dataSource": "MANUAL" } } } ``` ## 結束運動紀錄 ```url POST /sport-track/finish ``` * 要結束運動紀錄時, 請call 此API ### Request-結束運動紀錄 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- recordId | string | Y | 36 | | 運動紀錄id sportData | json | | | | 本次運動的數據, 若有帶值, 會以此數據當成本筆運動記錄的運動時間, 距離, 卡路里, 若為null, 則由後端自動計算 ### Request-結束運動紀錄-sportData(json) 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- sportDistance | double | | | | 運動距離, 單位為公尺(m) sportDuration | int | | | | 運動時間長度, 單位為秒(seconds) sportKcal | int | | | | 運動消耗的卡路里, 單位:千卡 ```javascript { "recordId": "071b07dc-0b63-4282-9732-eb10bc44376e", "sportData": { "sportDistance": null, "sportDuration": null, "sportKcal": null } } ``` ### Error-結束運動紀錄 httpCode | 錯誤碼 | 說明 --- | --- | --- 422 | SERVICE_ERROR.SPORT_RECORD_STATUS_ERROR | 運動紀錄的狀態切換錯誤.<BR> RECORDING只能切換為PAUSE/FINISH<BR>PAUSE只能切換為RECORDING/FINISH ### Response-結束運動紀錄 欄位 | 型態 | 說明 --- | --- | --- id | string | 運動紀錄id sportMod | string | 運動類型, 參閱 [運動模式](#運動模式) status | string | 運動紀錄狀態, 參閱 [運動紀錄狀態](#運動紀錄狀態) householdMemberId | string | 用戶ID targetType | string | 運動紀錄目標類型, 參閱 [運動紀錄目標類型](#運動紀錄目標類型) target | string | 目標ID. targetType: LOYALTY, 對應到loyalty_card_task.id optionInfo | string | 本次運動紀錄的附屬資訊, 請附加在 上傳軌跡紀錄 API內 createTime | timestamp | 建立日期時間 updateTime | timestamp | 更新日期時間 sportDistance | double | 運動距離, 單位為公尺(m) sportDuration | int | 運動時間長度, 單位為秒(seconds) kcal | int | 運動消耗的卡路里 goalDistance | double | 運動目標距離, 單位:公尺(m) goalDuration | int | 運動目標時間, 單位:秒(seconds) dataSource | string | 運動紀錄資料來源, 參閱[運動紀錄資料來源](#運動紀錄資料來源) ```javascript { "httpCode": 200, "result": { "data": { "id": "526808c0-4112-49fd-a6d2-ab2ebd19a486", "sportMod": "RUN", "status": "FINISH", "householdMemberId": "8a9e980a-c612-4f87-af07-a97a5f0fbed5", "targetType": "SPORT", "target": null, "createTime": 1676895957113, "updateTime": 1676895957113, "optionInfo": "", "dataSource": "MANUAL" } } } ``` ## 編輯運動紀錄(其他) ```url POST /sport-track/record/update ``` * 只允許編輯其他運動紀錄(targetType=SPORT, sportMod=OTHER) - sportMod=OTHER, sportModOther必填, 說明是何運動項目 - sportData必填, 運動持續時間(sportDuration), 運動距離(sportDistance), 卡路里(sportKcal)三個欄位必需至少填一項 - 其他運動記錄狀態只能為FINISH - 運動(開始/結束)時間(sportTime)必填 ### Request-編輯運動紀錄(其他) 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- id | string | Y | 36 | | 運動紀錄id sportMod | string | Y | 15 | | 運動類型 [運動模式](#運動模式) status | string | Y | 15 | | 運動紀錄狀態 [運動紀錄狀態](#運動紀錄狀態) targetType | string | Y | 20 | | 運動紀錄目標類型 [運動紀錄目標類型](#運動紀錄目標類型) sportModOther | string | Y(sportMod=OTHER) | 100 | | 其他運動項目, 當sportMod=OTHER時必填 sportTime | timestamp | Y(sportMod=OTHER) | | | 運動(開始/結束)時間(sportTime), 當sportMod=OTHER時必填 sportData | json | Y(sportMod=OTHER) | | | 運動統計json, 當sportMod=OTHER時必填, 運動持續時間(sportDuration), 運動距離(sportDistance), 卡路里(sportKcal)三個欄位必需至少填一項 ### Request-編輯運動紀錄(其他)-sportData(json) 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- sportDistance | double | | | | 運動距離, 單位為公尺(m) sportDuration | int | | | | 運動時間長度, 單位為秒(seconds) sportKcal | int | | | | 運動消耗的卡路里, 單位:千卡 ```javascript { "id": "e9fd30ec-051b-4b32-8ccb-3ff0af428548", "sportMod": "OTHER", "status": "FINISH", "targetType": "SPORT", "sportModOther": "全員逃走中", "sportTime": 1693903515000, "sportData": { "sportDuration": 2700, "sportDistance": null, "sportKcal": 1050 } } ``` ### Error-編輯運動紀錄(其他) httpCode | 錯誤碼 | 說明 --- | --- | --- 422 | SERVICE_ERROR.SPORT_RECORD_NOT_OTHER_SPORT | 非其他運動紀錄 422 | SERVICE_ERROR.SPORT_RECORD_OTHER_SPORT_CHANGE_MODE_NOT_ALLOWED | 其他運動模式不允許再變更成其他運動模式 ### Response-編輯運動紀錄(其他) 欄位 | 型態 | 說明 --- | --- | --- id | string | 運動紀錄id sportMod | string | 運動類型, 參閱 [運動模式](#運動模式) status | string | 運動紀錄狀態, 參閱 [運動紀錄狀態](#運動紀錄狀態) householdMemberId | string | 用戶ID targetType | string | 運動紀錄目標類型, 參閱 [運動紀錄目標類型](#運動紀錄目標類型) target | string | 目標ID. targetType: LOYALTY, 對應到loyalty_card_task.id optionInfo | string | 本次運動紀錄的附屬資訊, 請附加在 上傳軌跡紀錄 API內 createTime | timestamp | 建立日期時間 updateTime | timestamp | 更新日期時間 sportDistance | double | 運動距離, 單位為公尺(m) sportDuration | int | 運動時間長度, 單位為秒(seconds) kcal | int | 運動消耗的卡路里 goalDistance | double | 運動目標距離, 單位:公尺(m) goalDuration | int | 運動目標時間, 單位:秒(seconds) dataSource | string | 運動紀錄資料來源, 參閱[運動紀錄資料來源](#運動紀錄資料來源) sportModOther | string | 其他運動項目, sportMod=OTHER時可查看此欄位是何種運動 ```javascript { "httpCode": 200, "result": { "data": { "id": "e9fd30ec-051b-4b32-8ccb-3ff0af428548", "sportMod": "OTHER", "status": "FINISH", "householdMemberId": "150b53f5-7126-4900-9fb0-87a08b45e06b", "targetType": "SPORT", "createTime": 1693910073517, "updateTime": 1693910808594, "sportStartTime": 1693903515000, "sportEndTime": 1693903515000, "sportDuration": 2700, "kcal": 1050, "dataSource": "MANUAL", "sportModOther": "全員逃走中" } } } ``` ## 取得運動紀錄列表(Web端) ```url POST /sport-track/record/web-list ``` * Web端使用 ### Request-取得運動紀錄列表(Web端) #### Request-取得運動紀錄列表(Web端)-query (查詢條件json) 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- householdMemberId | string | Y | 36 | | householdMemberId startDate | string | Y | | | 要搜尋的啟始日期, YYYY-MM-DD endDate | string | Y | | | 要搜尋的結束日期, YYYY-MM-DD sportMod | string | | 15 | | 運動類型 [運動模式](#運動模式), 未填入表示查詢所有類型 #### Request-取得運動紀錄列表(Web端)-pagination (分頁json) 欄位 | 型態 | 必填 | 預設 | 說明 ---|---|---|---|--- current | int | | 1 | 當前頁數 pageSize | int | | 10 | 每頁結果數量,-1 為顯示所有 #### Request-取得運動紀錄列表(Web端)-sorter (排序json) 欄位 | 型態 | 必填 | 預設 | 說明 ---|---|---|---|--- field | string | | sportTime | 排序欄位,可排序欄位有 sportTime, sportMod, dataSource order | string | | desc | 升序或降序 ```javascript { "query": { "householdMemberId": "150b53f5-7126-4900-9fb0-87a08b45e06b", "startDate": "2023-04-01", "endDate": "2023-04-30", "sportMod": null } , "pagination": { "current": 1, "pageSize": 10 }, "sorter": { "field": "sportTime", "order": "desc" } } ``` ### Response-取得運動紀錄列表(Web端) 欄位 | 型態 | 說明 --- | --- | --- sportTime | timestamp | 運動時間 sportMod | string | 運動類型 [運動模式](#運動模式) steps | int | 步數 sportDistance | double | 運動距離, 單位為公尺(m) sportDuration | int | 運動時間長度, 單位為秒(seconds) kcal | int | 運動消耗的卡路里 dataSource | string | 運動紀錄資料來源, [運動紀錄資料來源](#運動紀錄資料來源) sportModOther | string | 其他運動項目, sportMod=OTHER時可查看此欄位是何種運動 ```javascript { "httpCode": 200, "result": { "data": [ { "sportTime": 1666683673892, "sportMod": "RUN", "steps": null, "sportDistance": 1500, "sportDuration": 1800, "kcal": 0, "dataSource": "MANUAL" }, ... ], "pagination": { "current": 1, "pageSize": 10, "total": 7 }, "sorter": { "field": "sportTime", "order": "desc" }, "total": 7 } } ``` ## 取得運動紀錄列表(App端) ```url POST /sport-track/record/list ``` * Web端使用 ### Request-取得運動紀錄列表(App端) #### Request-取得運動紀錄列表(App端)-query (查詢條件json) 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- startDate | string | Y | | | 要搜尋的啟始日期, YYYY-MM-DD endDate | string | Y | | | 要搜尋的結束日期, YYYY-MM-DD #### Request-取得運動紀錄列表(App端)-pagination (分頁json) 欄位 | 型態 | 必填 | 預設 | 說明 ---|---|---|---|--- current | int | | 1 | 當前頁數 pageSize | int | | 10 | 每頁結果數量,-1 為顯示所有 #### Request-取得運動紀錄列表(App端)-sorter (排序json) 欄位 | 型態 | 必填 | 預設 | 說明 ---|---|---|---|--- field | string | | sportTime | 排序欄位,可排序欄位有 sportTime, sportMod, dataSource order | string | | desc | 升序或降序 ```javascript { "query": { "startDate": "2023-04-01", "endDate": "2023-04-30" } , "pagination": { "current": 1, "pageSize": 10 }, "sorter": { "field": "sportTime", "order": "desc" } } ``` ### Response-取得運動紀錄列表(App端) 欄位 | 型態 | 說明 --- | --- | --- id | string | 運動紀錄id sportTime | timestamp | 運動時間 sportMod | string | 運動類型 [運動模式](#運動模式) sportDistance | double | 運動距離, 單位為公尺(m) sportDuration | int | 運動時間長度, 單位為秒(seconds) kcal | int | 運動消耗的卡路里 dataSource | string | 運動紀錄資料來源, [運動紀錄資料來源](#運動紀錄資料來源) status | string | 運動紀錄狀態, 參閱 [運動紀錄狀態](#運動紀錄狀態) goalDistance | double | 運動目標距離, 單位:公尺(m) goalDuration | int | 運動目標時間, 單位:秒(seconds) targetType | string | 運動紀錄目標類型, 參閱 [運動紀錄目標類型](#運動紀錄目標類型) sportModOther | string | 其他運動項目, sportMod=OTHER時可查看此欄位是何種運動 ```javascript { "httpCode": 200, "result": { "data": [ { "id": "526808c0-4112-49fd-a6d2-ab2ebd19a486", "sportTime": 1666683673892, "sportMod": "RUN", "sportDistance": 1500, "sportDuration": 1800, "kcal": 0, "dataSource": "MANUAL", "status": "FINISH", "goalDistance": 5000, "targetType": "SPORT" }, ... ], "pagination": { "current": 1, "pageSize": 10, "total": 7 }, "sorter": { "field": "sportTime", "order": "desc" }, "total": 7 } } ``` ## 取得運動紀錄配速 ```url POST /sport-track/record/pace ``` * 運動類型為距離計算型的才有配速 ### Request-取得運動紀錄配速 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- recordId | string | Y | 36 | | 運動紀錄id ```javascript { "recordId": "071b07dc-0b63-4282-9732-eb10bc44376e" } ``` ### Response-取得運動紀錄配速 欄位 | 型態 | 說明 --- | --- | --- km | int | 距離-第幾公里 pace | int | 配速, 單位:秒(seconds) kmh | double | 時速, 單位: 公里(km) ```javascript { "httpCode": 200, "result": { "data": [ { "km": 1, "pace": 360, "kmh": 8.5 }, ... ] } } ``` ## 取得運動紀錄Summary ```url POST /sport-track/record/summary-list ``` * 權限: App使用者及Web端使用者 ### Request-取得運動紀錄Summary 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- householdMemberId | string | N | | | householdMemberId, App使用者不需填,會由userToken中取得, Web使用者必填 startDate | string | Y | | | 要搜尋的啟始日期, YYYY-MM-DD endDate | string | Y | | | 要搜尋的結束日期, YYYY-MM-DD summaryType | string | Y | 10 | | 運動紀錄Summary查詢類別, 參閱 [運動紀錄Summary查詢類別](#運動紀錄Summary查詢類別) ```javascript { "startDate": "2023-04-30", "endDate": "2023-04-30", "summaryType": "DAILY" } ``` ### Response-取得運動紀錄Summary 欄位 | 型態 | 說明 --- | --- | --- kcal | int | 運動消耗的卡路里 sportDistance | double | 運動距離, 單位為公尺(m) sportDuration | int | 運動時間長度, 單位為秒(seconds) steps | int | 累計步數 avgSteps | int | 平均每日步數 dataList | json array | summary json ### Response-取得運動紀錄Summary-dataList(json) 欄位 | 型態 | 說明 --- | --- | --- sportTime | timestamp | 運動時間 kcal | int | 運動消耗的卡路里 sportDistance | double | 運動距離, 單位為公尺(m) sportDuration | int | 運動時間長度, 單位為秒(seconds) steps | int | 步數 ```javascript { "httpCode": 200, "result": { "data": { "kcal": 780, "sportDistance": 5500, "sportDuration": 1800, "steps": 3249, "avgSteps": 3249, "dataList": [ { "sportTime": 1666683673892, "kcal": 250, "sportDistance": 3500, "sportDuration": 900, "steps": 3249 }, ... ] } } } ``` ## 設定目標步數 ```url POST /sport/goal ``` ### Request-設定目標步數 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- step | int | Y | | | 步數 ```javascript { "step": 600 } ``` ### Response-設定目標步數 ```javascript { "httpCode": 200, "result": { "data": { "step": "600" } } } ``` ## 取得建議步數 ```url GET /sport/goal ``` ### Request-取得建議步數 ### Response-取得建議步數 欄位 | 型態 | 說明 --- | --- | --- id | int | 記錄id step | int | 建議步數 householdMemberId | string | householdMemberId createAt | long | 建立時間 timestamp updateAt | long | 更新時間 timestamp ```javascript { "httpCode": 200, "result": { "data": { "id": 1, "step": 600, "householdMemberId": "123", "createdAt": 1608285561161, "updatedAt": 1608286089292 } } } ``` ## 新增跑步紀錄(SportRun) ```url POST /sport/run/bulkAdd ``` ### Request-新增跑步紀錄(SportRun) 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- startTime | timestamp | Y | | | 開始運動時間 stopTime | timestamp | Y | | | 結束運動時間 sportTime | int | | | | 運動時間(秒) stepCount | int | | | | 步數 sportCount | int | | | | 運動次數 kcals | double | | | | 卡路里(千卡) distance | double | | | | 距離(km) recordCount | int | | | | 記錄次數 pauseCount | int | | | | 暫停次數 pauseTime | int | | | | 暫停時間(秒) crc | int | Y | | | 手環運動pk peisu | int | | | | unknown oxSportTimes | int | | | | 有氧運動時間(秒) averRate | int | | | | 平均心率 ```javascript { "data": [ { "startTime": 1608529808000, "stopTime": 1608529818000, "sportTime": 1, "stepCount": 1, "sportCount": 1, "kcals": 1.123, "distance": 1.321, "recordCount": 1, "pauseCount": 1, "pauseTime": 1, "crc": 1, "peisu": 1, "oxSportTimes": 1, "averRate": 1 }, { "startTime": 1608539808000, "stopTime": 1608539818000, "sportTime": 2, "stepCount": 2, "sportCount": 2, "kcals": 2, "distance": 2, "recordCount": 2, "pauseCount": 2, "pauseTime": 2, "crc": 1, "peisu": 2, "oxSportTimes": 2, "averRate": 2 } ] } ``` ### Response-新增跑步紀錄(SportRun) 欄位 | 型態 | 說明 --- | --- | --- id | int | 記錄id startTime | timestamp | 開始運動時間 stopTime | timestamp | 結束運動時間 sportTime | int | 運動時間(秒) stepCount | int | 步數 sportCount | int | 運動次數 kcals | double | 卡路里(千卡) distance | double | 距離(km) recordCount | int | 記錄次數 pauseCount | int | 暫停次數 pauseTime | int | 暫停時間(秒) crc | int | 手環運動pk peisu | int | unknown oxSportTimes | int | 有氧運動時間(秒) averRate | int | 平均心率 ```javascript { "httpCode": 200, "result": { "data": [ { "id": 5, "startTime": 1608529808000, "stopTime": 1608529818000, "sportTime": 1, "stepCount": 1, "sportCount": 1, "kcals": 1.123, "distance": 1.321, "recordCount": 1, "pauseCount": 1, "pauseTime": 1, "crc": 1, "peisu": 1, "oxSportTimes": 1, "averRate": 1, "householdMemberId": "c4e79844-c6ac-483b-ae98-f5c14277dc4b", "createTime": 1610093208060 }, { "id": 6, "startTime": 1608539808000, "stopTime": 1608539818000, "sportTime": 2, "stepCount": 2, "sportCount": 2, "kcals": 2, "distance": 2, "recordCount": 2, "pauseCount": 2, "pauseTime": 2, "crc": 1, "peisu": 2, "oxSportTimes": 2, "averRate": 2, "householdMemberId": "c4e79844-c6ac-483b-ae98-f5c14277dc4b", "createTime": 1610093208060 } ] } } ``` ## 查詢跑步紀錄(SportRun) ```url POST /sport/run/list ``` ### Request-查詢跑步紀錄(SportRun) 欄位 | 型態 | 預設 | 說明 ---|---|---|--- page | number | 1 | 當前頁數 pageSize | number | 10 | 每頁結果數量,-1 為顯示所有 sorter | string | startTime | 排序欄位 startAt | number | | 從(startTime) endAt | number | | 結束(startTime) householdMemberId | String | | 如果沒有給就依照token解出來的householdMemberId ```javascript { "query": { "startAt": 1507990400000, "endAt": 1658076799000 }, "pagination": { "current": 1, "pageSize":-1 }, "sorter": { "field": "create_time", "order": "asc" } } ``` ### Response-查詢跑步紀錄(SportRun) 欄位 | 型態 | 說明 --- | --- | --- id | int | 記錄id startTime | timestamp | 開始運動時間 stopTime | timestamp | 結束運動時間 sportTime | int | 運動時間(秒) stepCount | int | 步數 sportCount | int | 運動次數 kcals | double | 卡路里(千卡) distance | double | 距離(km) recordCount | int | 記錄次數 pauseCount | int | 暫停次數 pauseTime | int | 暫停時間(秒) crc | int | 手環運動pk peisu | int | unknown oxSportTimes | int | 有氧運動時間(秒) averRate | int | 平均心率 ```javascript { "httpCode": 200, "result": { "data": [ { "id": 1, "startTime": 1608529808000, "stopTime": 1608529818000, "sportTime": 1, "stepCount": 1, "sportCount": 1, "kcals": 1, "distance": 1, "recordCount": 1, "pauseCount": 1, "pauseTime": 1, "crc": 1, "peisu": 1, "oxSportTimes": 1, "averRate": 1, "householdMemberId": "c4e79844-c6ac-483b-ae98-f5c14277dc4b" }, { "id": 2, "startTime": 1608529808000, "stopTime": 1608529818000, "sportTime": 1, "stepCount": 1, "sportCount": 1, "kcals": 1, "distance": 1, "recordCount": 1, "pauseCount": 1, "pauseTime": 1, "crc": 1, "peisu": 1, "oxSportTimes": 1, "averRate": 1, "householdMemberId": "c4e79844-c6ac-483b-ae98-f5c14277dc4b" }, ... ], "pagination": { "current": 1, "pageSize": -1, "total": 4 }, "sorter": { "field": "create_time", "order": "asc" } } } ``` ## 新增30分鐘健康紀錄 ```url POST /sport/halfHour/bulkAdd ``` ### Request-新增30分鐘健康紀錄 欄位 | 型態 | 預設 | 說明 ---|---|---|--- exerciseTime | timestamp | 運動時間 stepValue | int | 步數 sportValue | int | 運動時間(秒) disValue | double | 距離(km) calValue | double | 卡路里(卡) sourceType | string | O: "Osmile"、G: "Goofle Fit"、I: "IOS 健康" ```javascript { "sportData":[ { "exerciseTime": 1583991833330, "stepValue": 100, "sportValue": 100, "disValue": 100.111, "calValue": 100.222, "sourceType": "G" }, { "exerciseTime": 1583992133330, "stepValue": 200, "sportValue": 200, "disValue": 200.333, "calValue": 200.444, "sourceType": "G" } ] } ``` ### Response-新增30分鐘健康紀錄 欄位 | 型態 | 說明 --- | --- | --- exerciseTime | timestamp | 運動時間 stepValue | int | 步數 sportValue | int | 運動時間(秒) disValue | double | 距離(km) calValue | double | 卡路里(卡) sourceType | string | O: "Osmile"、G: "Goofle Fit"、I: "IOS 健康" ```javascript { "httpCode": 200, "result": { "data": [ { "exerciseTime": 1583991833330, "stepValue": 100, "sportValue": 100, "disValue": 100.111, "calValue": 100.222, "sourceType": "G" }, { "exerciseTime": 1583992133330, "stepValue": 200, "sportValue": 200, "disValue": 200.333, "calValue": 200.444, "sourceType": "G" } ] } } ``` ## 查詢30分鐘健康紀錄 ```url POST /sport/halfHour/list ``` ### Requests-查詢30分鐘健康紀錄 欄位 | 型態 | 預設 | 說明 ---|---|---|--- page | number | 1 | 當前頁數 pageSize | number | 10 | 每頁結果數量,-1 為顯示所有 sort | string | startTime | 排序欄位 startAt | number | | 從(startTime) endAt | number | | 結束(startTime) householdMemberId | string | | 如果沒有給就依照token解出來的householdMemberId ```javascript { "query": { "startAt": 1583991833330, "endAt": 1583991933330 }, "pagination": { "current": 1, "pageSize":-1 }, "sorter": { "field": "exerciseTime", "order": "asc" } } ``` ### Response-查詢30分鐘健康紀錄 欄位 | 型態 | 說明 --- | --- | --- exerciseTime | timestamp | 運動時間 stepValue | int | 步數 sportValue | int | 運動時間(秒) disValue | double | 距離(km) calValue | double | 卡路里(卡) sourceType | string | O: "Osmile"、G: "Goofle Fit"、I: "IOS 健康" ```javascript { "httpCode": 200, "result": { "data": [ { "exerciseTime": 1584020633330, "stepValue": 100, "sportValue": 100, "disValue": 100.111, "calValue": 100.222, "sourceType": "O" } ], "total": 2 } } ``` ### 查詢30分鐘健康紀錄區間內平均結果 ```url POST /sport/halfHour/avg ``` ### Request-查詢30分鐘健康紀錄區間內平均結果 欄位 | 型態 | 預設 | 說明 ---|---|---|--- startAt | number | | 從(startTime) endAt | number | | 結束(startTime) householdMemberId | string | | 如果沒有給就依照token解出來的householdMemberId ```javascript { "query": { "endAt": 1613059200000, "householdMemberId": "de4e7194-29c9-488a-855c-d054f26ed3e1", "startAt": 1612454400000 } } ``` ### Response-查詢30分鐘健康紀錄區間內平均結果 欄位 | 型態 | 說明 --- | --- | --- stepValue | int | 步數 sportValue | int | 運動時間(秒) disValue | double | 距離(km) calValue | double | 卡路里(卡) ```javascript { "httpCode": 200, "result": { "data": { "stepValue": 14, "sportValue": 349, "disValue": 0, "calValue": 1 } } } ``` ## 新增每日總步數紀錄(DailySteps) ```url POST /user/daily-steps/add ``` * 只記錄每日總步數 ### Request-新增每日總步數紀錄(DailySteps) 欄位 | 型態 | 必填 | 預設 | 說明 ---|---|---|---|--- list | json array | Y | | 總步數記錄json array, 日期不可重覆 #### Request-新增每日總步數紀錄(DailySteps)-list(json object) 欄位 | 型態 | 必填 | 預設 | 說明 ---|---|---|---|--- stepDate | string | Y | | 記錄步數日期, 格式: YYYY-MM-DD steps | int | Y | | 總步數, 需 >= 0 sourceType | string | Y | | 資料來源裝置(O:Osmile/G:Google Fit/I:IOS健康) ```javascript { "list":[ { "stepDate": "2022-04-24", "steps": 5000, "sourceType": "G" }, { "stepDate": "2022-04-25", "steps": 4800, "sourceType": "G" }, { "stepDate": "2022-04-26", "steps": 6600, "sourceType": "G" } ] } ``` ### Response-新增每日總步數紀錄(DailySteps) 欄位 | 型態 | 說明 --- | --- | --- count | int | 新增/更新 筆數 ```javascript { "httpCode": 200, "result": { "data": { "count": 3 } } } ``` ## 查詢每日總步數紀錄(DailySteps) ```url POST /user/daily-steps/list ``` ### Request-查詢每日總步數紀錄(DailySteps) #### Request-查詢每日總步數紀錄(DailySteps)-query(查詢條件json) 欄位 | 型態 | 必填 | 預設 | 說明 ---|---|---|---|--- startDate | string | N | | 查詢起日, 格式 YYYY-MM-DD endDate | string | N | | 查詢迄日, 格式 YYYY-MM-DD #### Request-查詢每日總步數紀錄(DailySteps)-pagination(分頁json) 欄位 | 型態 | 必填 | 預設 | 說明 ---|---|---|---|--- current | int | | 1 | 當前頁數 pageSize | int | | 10 | 每頁結果數量,-1 為顯示所有 #### Request-查詢每日總步數紀錄(DailySteps)-sorter(排序json) 欄位 | 型態 | 必填 | 預設 | 說明 ---|---|---|---|--- field | string | | stepDate | 排序欄位,可排序欄位有 stepDate, steps order | string | | asc | 升序或降序 ```javascript { "query": { "startDate": "2022-01-13", "endDate": "2022-01-15" } , "pagination": { "current": 1, "pageSize": 10 }, "sorter": { "field": "stepDate", "order": "asc" } } ``` ### Response-查詢每日總步數紀錄(DailySteps) 欄位 | 型態 | 說明 --- | --- | --- id | string | 記錄id householdMemberId | string | householdMemberId stepDate | string | 步數日期, 格式 YYYY-MM-DD steps | int | 步數 sourceType | string | 資料來源裝置(O:Osmile/G:Google Fit/I:IOS健康) ```javascript { "httpCode": 200, "result": { "data": [ { "id": "7d506987-c7d0-44a8-a373-0c6d7280f0dc", "householdMemberId": "8a9e980a-c612-4f87-af07-a97a5f0fbed5", "stepDate": "2022-01-13", "steps": 7890, "sourceType": "G" }, { "id": "85ce6c44-79f7-4641-8f88-206c8b7c4b5b", "householdMemberId": "8a9e980a-c612-4f87-af07-a97a5f0fbed5", "stepDate": "2022-01-14", "steps": 7890, "sourceType": "G" }, { "id": "133633f4-d0f3-47eb-bcd9-cc5069ca4bb6", "householdMemberId": "8a9e980a-c612-4f87-af07-a97a5f0fbed5", "stepDate": "2022-01-15", "steps": 7890, "sourceType": "G" } ], "pagination": { "current": 1, "pageSize": 10, "total": 3 }, "sorter": { "field": "stepDate", "order": "asc" }, "total": 3 } } ```