# 課程行事曆管理
# Schema
### 個人課程班次(PersonalLesson)
[個人課程班次](Untitled%2012/Untitled.csv)
| 欄位 | 型態 | 長度限制 | 說明 |
|---|---|---|---|---|
| id | number | | 課程班次編號|
| supervision | string | | 課程班次名稱|
| user | number | | 學員id|
| cycleType | number | | 循環模式 enum: [1: 每天, 2: 每週, 3: 每月]|
| cycleDetail | array<number> | | 循環模式細節, 僅"每週"需要填入 ex: 每週一, 五, 日 帶入[1, 5, 7]|
| duration | number | | 課程長度(秒)|
| personalCourse | array<object> | | 個人課程時間設定
| -id | number | | 預約Id(reservationId)|
| -startedAt | timestamp | | 訓練單元#預約開始時間 |
| -endAt | timestamp | | 訓練單元#預約結束時間 |
| -date | timestamp | | 暫時同startedAt |
| -duration | number | | 訓練時間長度(seconds) |
| -lesson | number | | 課程班次id |
| -unitId | number | | 課程單元id |
| -unitName | string | | 課程單元名稱(關聯欄位) |
| courseId | number | | 系列課程id |
| startedAt | string | 10 | 課程開始時間(HH:MM)|
| startDate | timestamp | | 班次開始時間 |
| endDate | timestamp | | 班次結束時間 |
| status | number | | 狀態 enum: [1: 未開始, 2: 進行中, 3: 已結束] |
example:
```json=
{
"id": 1,
"supervision": "督導員",
"cycleType": 2,
"cycleDetail": [1, 4, 7],
"user": 12,
"duration": 300,
"startedAt": 1583958097651,
"updatedAt": 1583958097651,
"personalCourse": [
PersonalCourse,
...
]
}
```
### 個人課程(PersonalCourse)
[個人課程](Untitled%2012/Untitled%201.csv)
example:
```json=
{
"comment": "安排平衡訓練項目",
"startedAt": 1583950000000,
"endAt": 1583960000000
}
```
### 團體課程班次(GroupLesson)
[團體課程班次](Untitled%2012/Untitled%202.csv)
example:
```json=
{
"id": 1,
"supervision": "督導員",
"cycleType": 2,
"cycleDetail": [1, 4, 7],
"user": 12,
"duration": 300,
"startedAt": 1583958097651,
"updatedAt": 1583958097651,
"groupCourse": [
GroupCourse,
...
]
}
```
### 團體課程(GroupCourse)
[團體課程](Untitled%2012/Untitled%203.csv)
example:
```json=
{
"id": 666,
"date": 1583950000000,
"duration": 120,
"startedAt": 1583950000000,
"endAt": 1583960000000
}
```
# API
## 查詢班次課程能否被刪除
Request:
GET /lesson/isdeletable/$id
Response (成功):
```json=
{
"success": true,
"isDeletable": true
}
```
## (OK) 查詢程班次列表(所有)
Request:
GET /lesson/?$queryParams
[Query Params:](Untitled%2012/Query%20Params.csv)
Response (成功):
```json=
{
"success": true,
"total": 1,
"data": [
{
"reservationInfo": [
{
"id": 17,
"startedAt": 1594605600000,
"endAt": 1594609200000,
"date": "1594605600000",
"comment": null,
"duration": 3600,
"lesson": 5,
"unitId": null, //CourseUnitId
"unitName": null //CourseUnitName
}
],
"user": [
17 //UserId
],
"id": 5,
"createdAt": 1594531514945,
"updatedAt": 1594622159434,
"name": "林玉清 / A123111111",
"type": 2,
"limit": 1,
"supervision": "James",
"cycleType": null,
"cycleDetail": [],
"duration": 1594486800574,
"startedAt": "1594519200097",
"courseId": null,
"organizationId": 1,
"startDate": 1594605600000,
"endDate": 1594881343304,
"status": 2,
"unitCount": 1,
"userCount": 1
},
...
]
}
```
## 個人課程班次
### 查詢個人程班次列表
Request:
GET /lesson/personal?$queryParams
[Query Params:](Untitled%2012/Query%20Params%201.csv)
Response (成功):
```json=
{
"success": true,
"total": 5,
"data": [
{
"user":17,
"id":5,
"createdAt":1594531514945,
"updatedAt":1594622159434,
"name":"林玉清 / A123111111",
"type":2,
"limit":1,
"supervision":"James",
"cycleType":null,
"cycleDetail":[
],
"duration":1594486800574,
"startedAt":"1594519200097",
"courseId":null,
"organizationId":1,
"startDate":1594605600000,
"endDate":1594881343304,
"status":2,
"unitCount":1, //CourseUnit Count
"userCount":1,
"personalCourse":[
{
"id":17, //ReservationId
"startedAt":1594605600000,
"endAt":1594609200000,
"comment":null,
"courseUnit":null, //CourseUnitId
"lesson":5 //LessonId
}
]
}
]
}
```
### 新增個人課程班次
Request:
POST /lesson/personal
Payload:
```json=
{
"name":"test record",
"supervision":"tester",
"cycleType":1, //循環模式
"cycleDetail":[1,4,7], //週期
"user":1,
"duration":300,
"startedAt":"23:00",
"startDate":1594825200000,
"endDate":1594912200000,
"personalCourse":[
{
"startedAt":1594825200000,
"endAt":1594825800000,
"comment":"test-1" //備註
},{
"startedAt":1594911600000,
"endAt":1594912200000,
"comment":"test-2"
}
]
}
```
Response (成功):
```json=
{
"success": true,
"data": {
"name":"test record",
"supervision":"tester",
"user":1,
"cycleType":1,
"cycleDetail":"[1,4,7]",
"duration":300,
"personalCourse":[
{
"startedAt":1594911600000,
"endAt":1594912200000,
"comment":"test-1"
},{
"startedAt":1594998000000,
"endAt":1594998600000,
"comment":"test-2"
}
],
"startedAt":"23:00",
"startDate":1594911600000,
"endDate":1594998600000,
"type":2,
"limit":1,
"organizationId":1,
"id":23
}
}
```
### 編輯個人課程班次
Request:
PUT /lesson/personal/$id
Payload:
```json=
{
"name":"test record",
"supervision":"tester",
"cycleType":1,"cycleDetail":[1,4,7],
"user":1,
"duration":300,
"startedAt":"23:00",
"startDate":"1594825200000",
"endDate":"1594912200000",
"personalCourse":[
{
"startedAt":1594825200000,
"endAt":1594825800000,
"comment":"test-1 after revised"
},{
"startedAt":1594911600000,
"endAt":1594912200000,
"comment":"test-2 after revised"
}
]
}
```
Response (成功):
```json=
{
"success": true,
"data": {
PersonalLesson
}
}
```
### 查詢個人課程班次列表
Request:
GET /lesson/personal?$queryParams
[Query Params:](Untitled%2012/Query%20Params%202.csv)
Response (成功):
```json=
{
"success": true,
"total": 5,
"data": [
PersonalLesson,
PersonalLesson,
...
]
}
```
### 查詢個人課程班次
Request:
GET /lesson/personal/$id
Response (成功):
```json=
{
"success": true,
"data": {
PersonalLesson
}
}
```
### 刪除個人課程班次
Request:
DELETE /lesson/personal/$id
Response (成功):
```json=
{
"success": true,
"data": {}
}
```
## 團體課程班次
### (OK) 新增團體課程班次
Request:
POST /lesson/group
Payload:
```json=
{
GroupLesson
}
```
Response (成功):
```json=
{
"success": true,
"data": {
GroupLesson
}
}
```
### (OK) 編輯團體課程班次
Request:
PUT /lesson/group/$id
Payload:
```json=
{
GroupLesson
}
```
Response (成功):
```json=
{
"success": true,
"data": {
GroupLesson
}
}
```
### (OK) 查詢團體課程班次列表
Request:
GET /lesson/group?$queryParams
[Params:](Untitled%2012/Params.csv)
### (OK) 查詢團體課程班次
Request:
GET /lesson/group/$id
Response (成功):
```json=
{
"success": true,
"data": [
{
GroupLesson,
]
]
}
```
### (OK) 刪除團體課程班次
Request:
DELETE /lesson/group/$id
Response (成功):
```json=
{
"success": true,
"data": {}
}
```
### (OK) 新增團體課程班次學員
Request:
POST /lesson/group/$id/user
Payload:
```json=
{
user: [1,2,444,666,888]
}
```
Response (成功):
```json=
{
"success": true,
"data": {
}
}
```
### (OK) 查詢團體課程班次學員清單
Request:
GET /lesson/group/$id/user
Response (成功):
```json=
{
"success": true,
"data": [
{
"id": 1,
"checkIn": true
},
{
"id": 2,
"checkIn": false
}
]
}
```
### (OK) 簽到團體課程班次學員
Request:
PUT /lesson/group/$gid/user/$uid/$lessonCourseUnitId
Response (成功):
```json=
{
"success": true,
"data": {
"updatedAt": 1583958097651,
}
}
```
### (待確認) 刪除團體課程班次學員
Request:
POST /lesson/group/$gid/delete/$gid
Response (成功):
```json=
{
"success": true
}
```