# 運動紀錄
---
- 常數定義
- [運動類型基礎](#運動類型基礎)
- [運動模式](#運動模式)
- [運動紀錄狀態](#運動紀錄狀態)
- [運動紀錄目標類型](#運動紀錄目標類型)
- [運動紀錄資料來源](#運動紀錄資料來源)
- [運動紀錄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
}
}
```