# 想像朋友寫作會暗網 API
## URL Path Documentation
### Root Path: /api/v1
/v1/users
/v1/events
/v1/works
### User
| 說明 | Method | Path |
| -------- | -------- | -------- |
| 註冊使用者 | POST | /users/register |
| 登入使用者 | POST | /users/login |
| 取得所有使用者 | GET | /users |
| 取得自己的資料 | GET | /users/me |
| 變更自己的資料 | PATCH | /users/me |
| 變更自己的密碼 | PATCH | /users/updatePassword |
| 取得單一使用者 | GET | /users/:username |
| 變更單一使用者資料 | PATCH | /users/:username |
| 顯示帳號和暱稱搜尋結果 | GET | /search |
| 修改自己的收信時機 | PATCH | /myEmailTime |
### Event
| 說明 | Method | Path | Params |
| -------- | -------- | -------- | - |
| 創立活動 | POST | /events/add | |
| 刪除活動 | GET | /events/delete/:id | |
| 編輯活動 | PATCH | /events/:id | |
| 取得所有活動 | GET | /events | |
| 取得單一活動 | GET | /events/:id | |
| 取得單一活動參加者 | GET | /events/participants/:id | |
| 報名活動 | POST | /events/sign-up/:id | |
| 取消報名活動 | GET | /events/cancel-sign-up/:id | |
### Work
| 說明 | Method | Path | Params |
| -------- | -------- | -------- | - |
| 新增稿件 | POST | /works/add | |
| 刪除稿件 | GET | /works/delete/:id | |
| 編輯稿件 | PATCH | /works/:id | |
| 取得所有稿件 | GET | /works | |
| 取得單一稿件 | GET | /works/:id | |
| 搜尋 tags 結果 | GET | /works/tags/search | |
## URL Path Documentation
### 身分認證
本 server 使用 JWT 進行身分驗證,登入成功會獲得一組 token,之後將該 token 帶在 HTTP Request header 中的 authorization 欄位進行驗證。以下以 `me` 的 request 為範例:
```js
fetch('http://localhost:3001/v1/users/me', {
headers: {
'authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InY2MTI2NSIsImlhdCI6MTYwOTYxMzI2M30.szKHap8EUz03YG7sZffGqht-bX0Gh19P8--o-oaOR1Y'
}
})
.then(res => res.json())
.then(data => console.log(data))
```
### User
#### query
`適用:`取得所有使用者資料、取得自己資料、取得特定使用者資料。
```
_offset:預設 0
_limit:預設 10
_sort:預設 DESC
_order:預設 session
expand 沒有預設,想拿取該資料設定成 true 即可。
_expand_host
_expand_participate
_expand_works
_expand_readRecord
_expand_emailTime
_expand_all
```
#### 註冊使用者
Request Example
```json
{
"username": "v61265",
"password": "123",
"againPassword": "123",
"nickname": "生菜",
"email": "v61265@gmail.com",
"session": "gs_11"
}
```
Response Example
```json
{
"ok": 1,
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InY2MTI2NSIsImlhdCI6MTYwOTYxMzI2M30.szKHap8EUz03YG7sZffGqht-bX0Gh19P8--o-oaOR1Y"
}
```
#### 登入使用者
Request Example
```json
{
"username": "v61265",
"password": "123",
}
```
Response Example
```json
{
"ok": 1,
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InY2MTI2NSIsImlhdCI6MTYwOTQwMTY2NX0.0467Pr2wgckza0gApSzayi11RMmxb7DR64YVLQlwn10"
}
```
#### 取得所有使用者
Response Example
```json
{
"ok": 1,
"users": [
{
"id": 2,
"username": "zoe_ho",
"nickname": "zoe",
"session": "if_02",
"contact": "https://example.com",
"portrait": "https://ppt.cc/fni7cx@.jpg",
"role": "admin",
"record": "",
"description": "若能夠欣賞到Zoe的美,相信我們一定會對Zoe改觀。問題的關鍵究竟為何?做好Zoe這件事,可以說已經成為了全民運動。",
"isDeleted": false,
"createdAt": "2021-01-09T07:33:21.000Z",
"updatedAt": "2021-01-09T07:33:21.000Z"
},
{
"id": 5,
"username": "zangwang",
"nickname": "張妄",
"session": "if_01",
"contact": "https://example.com",
"portrait": "https://ppt.cc/fni7cx@.jpg",
"role": "active-member",
"record": "",
"description": "老舊的想法已經過時了。儘管張妄看似不顯眼,卻佔據了我的腦海。",
"isDeleted": false,
"createdAt": "2021-01-09T07:33:21.000Z",
"updatedAt": "2021-01-09T07:33:21.000Z"
},
]
}
```
#### 取得自己資料
Response Example
```json
{
"ok": 1,
"user": {
"id": 8,
"username": "v61265",
"email": "v61265@gmail.com",
"nickname": "生菜",
"session": "gs_11",
"contact": null,
"portrait": "https://ppt.cc/fni7cx@.jpg",
"role": "frozen",
"record": null,
"description": null,
"isDeleted": false,
"createdAt": "2021-01-13T06:03:58.000Z",
"updatedAt": "2021-01-13T06:03:58.000Z"
}
}
```
#### 更改自己資料
後端會先去撈原本資料,因此只要輸入欲更改部分就好。
Request Example
```json
{
"email": "update@gmail.com",
"description": "生菜忽然動了一下",
}
```
Response Example
```json
{
ok: 1,
message: "更新成功",
}
```
#### 更改自己密碼
Request Example
```json
{
"oldPassword": "123"
"newPassword": "456"
"againPassword": "456"
}
```
Response Example
```json
{
ok: 1,
message: "更新成功",
}
```
#### 取得特定使用者
Response Example
```json
{
"ok": 1,
"user": {
"id": 2,
"username": "zoe_ho",
"nickname": "zoe",
"session": "if_02",
"contact": "https://example.com",
"portrait": "https://ppt.cc/fni7cx@.jpg",
"role": "admin",
"record": "",
"description": "若能夠欣賞到Zoe的美,相信我們一定會對Zoe改觀。問題的關鍵究竟為何?做好Zoe這件事,可以說已經成為了全民運動。",
"isDeleted": false,
"createdAt": "2021-01-09T07:33:21.000Z",
"updatedAt": "2021-01-09T07:33:21.000Z"
}
}
```
#### 更改特定使用者
後端會先去撈原本資料,因此只要輸入欲更改部分就好。
Request Example
```json
{
"role": "admin"
}
```
Response Example
```json
{
ok: 1,
message: "更新成功",
}
```
#### 顯示帳號和暱稱搜尋結果
query:
```
_offset:預設 0
_limit:預設 10
_sort:預設 DESC
_order:預設 session
_keyword:要搜尋的關鍵字
```
Response Example
```json
{
"ok": 1,
"users": [
{
"username": "zoe_ho",
"nickname": "zoe",
"portrait": "https://ppt.cc/fni7cx@.jpg"
},
{
"username": "Leiiiiiii",
"nickname": "Lei",
"portrait": "https://ppt.cc/fni7cx@.jpg"
},
{
"username": "yongchen",
"nickname": "yongchen",
"portrait": "https://ppt.cc/fni7cx@.jpg"
}
]
}
```
#### 修改自己的收信時機
*不會* 從資料庫撈資料,請確保每個時機都被傳入。
Request Example
```json
{
"eventCreated": true,
"eventUpdated": false,
"eventRemain": true,
"eventSignUp": false,
"eventAlternate": false,
"postSuccess": true,
"postComment": false,
}
```
Response Example
```json
{
ok: 1,
message: "更新成功",
}
```
### Event
#### 創立活動
會檢查的必填欄位:
`title, presentAttendeesLimit,
workLimit, time, openWorksTime, location`
Request Example
```
{
"title": "活動標題"
"description": "描述是非必填欄位喔",
"picture": "example.jpg",
"presentAttendeesLimit": 12,
"workLimit": 4,
"time": "2021-01-06T08:18:34.000Z",
"openWorksTime": "2021-01-06T08:18:34.000Z",
"location": "某個地方",
"meetingLink": "http:example",
"referance: null,
}
```
Response Example
```
{
"ok": 1,
"id": 7
}
```
#### 刪除活動
Response Example
```
{
"ok": 1
}
```
#### 編輯活動
後端**不**會先去撈原本資料,因此**請連原本的資料都帶上**。
Request Example
```
{
"title": "活動標題"
"description": "更改一點描述",
"picture": "example.jpg",
"presentAttendeesLimit": 12,
"workLimit": 4,
"time": "2021-01-06T08:18:34.000Z",
"openWorksTime": "2021-01-06T08:18:34.000Z",
"location": "某個地方",
"meetingLink": "http:example",
"referance: null,
}
```
Response Example
```
{
"ok": 1,
"message": "更新成功"
}
```
#### 取得所有活動(2021/2/12 更新)
篩選器:
```
_offset:預設 0
_limit:預設 10
_sort:預設 DESC
_order:預設 createdAt
status: 預設取得所有資料,`history` 可得歷史紀錄、 `coming` 可得即將舉辦的活動。
expand 沒有預設,想拿取該資料設定成 true 即可。
_expand_host
_expand_participants
_expand_works
_expand_all
```
Response Example
```
{
"ok": 1,
"data": {
"events": [
{
"id": 6,
"title": "123",
"description": null,
"picture": "https://ppt.cc/fvNpnx@.jpg",
"hostId": 1,
"presentAttendeesLimit": 4,
"workLimit": 4,
"time": "2021-01-08T02:02:42.000Z",
"openWorksTime": "2021-01-06T08:18:34.000Z",
"location": "rrrr",
"meetingLink": null,
"referance": null,
"isDeleted": false,
"createdAt": "2021-01-09T08:41:18.000Z",
"updatedAt": "2021-01-09T08:41:18.000Z"
},
{
"id": 1,
"title": "第一場批鬥會",
"description": "富爾曼諾夫說過一句經典的名言,一個人就是一種典型。但願各位能從這段話中獲得心靈上的滋長。對第一場批鬥會進行深入研究,在現今時代已經無法避免了。在這種不可避免的衝突下,我們必須解決這個問題。看看別人,再想想自己,會發現問題的核心其實就在你身旁。",
"picture": "https://ppt.cc/fvNpnx@.jpg",
"hostId": 1,
"presentAttendeesLimit": 3,
"workLimit": 4,
"time": "2021-01-09T07:33:21.000Z",
"openWorksTime": "2021-01-09T07:33:21.000Z",
"location": "松山南京小樹屋 201",
"meetingLink": null,
"referance": null,
"isDeleted": false,
"createdAt": "2021-01-09T07:33:21.000Z",
"updatedAt": "2021-01-09T07:33:21.000Z"
},
]
}
}
```
#### 取得單一活動
Response Example
```json=
{
"ok": 1,
"data": {
"event": [
{
"id": 2,
"title": "再辦一場批鬥會",
"description": "如果此時我們選擇忽略再辦一場批鬥會,那後果可想而知。話雖如此,我們卻也不能夠這麼篤定。/n/n再辦一場批鬥會究竟是怎麼樣的存在,始終是個謎題。",
"picture": "https://ppt.cc/fvNpnx@.jpg",
"hostId": 2,
"presentAttendeesLimit": 10,
"workLimit": 4,
"time": "2021-01-09T07:33:21.000Z",
"openWorksTime": "2021-01-09T07:33:21.000Z",
"location": "生菜家 (?)",
"meetingLink": null,
"referance": null,
"isDeleted": false,
"createdAt": "2021-01-09T07:33:21.000Z",
"updatedAt": "2021-01-09T07:33:21.000Z",
"Works": [
{
"id": 2,
"title": "晚餐要吃什麼",
"authorId": 3,
"eventId": 2,
"category": "other",
"open": false,
"anonymous": true,
"content": " 第歐根尼說過一句著名的話,太陽也光顧污穢之地,但並沒有因此而被玷污。想必各位已經看出了其中的端倪。朱耀燮告訴我們,在愛情方面,女人可能是很堅強的,也可能是很懦弱的。要么是愛別人,要么是接受別人的愛,一旦陷入情網之後,就是有人命令她朝火裡鑽,她也會心甘情願服從的。這段話雖短,卻足以改變人類的歷史。回過神才發現,思考晚餐要吃什麼的存在意義,已讓我廢寢忘食。我們都很清楚,這是個嚴謹的議題。儘管如此,我們仍然需要對晚餐要吃什麼保持懷疑的態度。現在,正視晚餐要吃什麼的問題,是非常非常重要的。因為,其實,若思緒夠清晰,那麼晚餐要吃什麼也就不那麼複雜了。晚餐要吃什麼的出現,必將帶領人類走向更高的巔峰。可是,即使是這樣,晚餐要吃什麼的出現仍然代表了一定的意義。俗話說的好,掌握思考過程,也就掌握了晚餐要吃什麼。每個人都不得不面對這些問題。在面對這種問題時,務必詳細考慮晚餐要吃什麼的各種可能。如果仔細思考晚餐要吃什麼,會發現其中蘊含的深遠意義。深入的探討晚餐要吃什麼,是釐清一切的關鍵。我們不得不相信,希臘曾經說過,無論誰,只要他還活著,你就不能稱他是幸福的。這把視野帶到了全新的高度。泰戈爾曾提出,你若愛她,讓你的愛像陽光一樣包圍她,並且給她自由。這啟發了我。/n/n探討晚餐要吃什麼時,如果發現非常複雜,那麼想必不簡單。",
"version": 1,
"isDeleted": false,
"createdAt": "2021-01-09T07:33:21.000Z",
"updatedAt": "2021-01-09T07:33:21.000Z",
"EventId": 2
}
],
"host": {
"id": 2,
"username": "zoe_ho",
"password": "$2b$10$IbVzlvVo56xaiYkBTl2WpesHbQcba5Bjf5wh7lzUG2yH50k6IwO2W",
"email": "zeo@gmail.com",
"nickname": "zoe",
"session": "if_02",
"contact": "https://example.com",
"portrait": "https://ppt.cc/fni7cx@.jpg",
"role": "admin",
"record": "",
"description": "若能夠欣賞到Zoe的美,相信我們一定會對Zoe改觀。問題的關鍵究竟為何?做好Zoe這件事,可以說已經成為了全民運動。",
"isDeleted": false,
"createdAt": "2021-01-09T07:33:21.000Z",
"updatedAt": "2021-01-09T07:33:21.000Z"
},
"participant": [
{
"id": 6,
"username": "yongchen",
"password": "$2b$10$IbVzlvVo56xaiYkBTl2WpesHbQcba5Bjf5wh7lzUG2yH50k6IwO2W",
"email": "yongchen@gmail.com",
"nickname": "yongchen",
"session": "gs_04",
"contact": "https://example.com",
"portrait": "https://ppt.cc/fni7cx@.jpg",
"role": "active-member",
"record": "",
"description": "若無法徹底理解yongchen,恐怕會是人類的一大遺憾。",
"isDeleted": false,
"createdAt": "2021-01-09T07:33:21.000Z",
"updatedAt": "2021-01-09T07:33:21.000Z",
"User_Events": {
"createdAt": "2021-01-09T07:33:21.000Z",
"updatedAt": "2021-01-09T07:33:21.000Z",
"EventId": 2,
"UserId": 6
}
}
]
}
]
}
}
```
#### 取得活動參加者名單
Response Example
```json=
{
"ok": 1,
"participants": {
"present": [
1,
3
],
"online": [
4
],
"alternative": []
}
}
```
#### 報名活動
Request Example
```
{
"type": "present"
}
```
Response Example
```
{
"ok": 1,
"message": "報名成功!"
}
```
#### 取消報名活動
Response Example
```
{
"ok": 1,
"message": "取消報名成功!"
}
```
### Work
#### 創立稿件
會檢查的必填欄位:
`title, eventId, category, open, anonymous`
Request Example
```
{
"title": "我是標題",
"content": "我是內容",
"eventId": 2,
"category": "other",
"open": true,
"anonymous": false,
}
```
Response Example
```
{
"ok": 1,
"id": 7
}
```
#### 刪除稿件
Response Example
```
{
"ok": 1
}
```
#### 編輯稿件
後端**不**會先去撈原本資料,因此**請連原本的資料都帶上**。
Request Example
```
{
"title": "我是標題",
"content": "更改內容",
"eventId": 2,
"category": "other",
"open": true,
"anonymous": false,
}
```
Response Example
```
{
"ok": 1,
}
```
#### 取得所有活動
篩選器:
```
_offset:預設 0
_limit:預設 10
_sort:預設 DESC
_order:預設 createdAt
// expand 沒有預設,想拿取該資料設定成 true 即可。
_expand_author
_expand_readers
_expand_event
_expand_tags
_expand_all
// condition
authorId
eventId
```
Response Example
```json
{
"ok": 1,
"works": [
{
"id": 1,
"title": "這是第一篇 demo",
"authorId": 3,
"eventId": 1,
"category": "novel",
"open": false,
"anonymous": false,
"content": "若能夠欣賞到這是第一篇 demo的美,相信我們一定會對這是第一篇 demo改觀。這是第一篇 demo,發生了會如何,不發生又會如何。那麼,本人也是經過了深思熟慮,在每個日日夜夜思考這個問題。對於這是第一篇 demo,我們不能不去想,卻也不能走火入魔。面對如此難題,我們必須設想周全。這是第一篇 demo似乎是一種巧合,但如果我們從一個更大的角度看待問題,這似乎是一種不可避免的事實。這樣看來,從這個角度來看,這是不可避免的。/n/n一般來講,我們都必須務必慎重的考慮考慮。在這種不可避免的衝突下,我們必須解決這個問題。如果仔細思考這是第一篇 demo,會發現其中蘊含的深遠意義。世界上若沒有這是第一篇 demo,對於人類的改變可想而知。我想,把這是第一篇 demo的意義想清楚,對各位來說並不是一件壞事。看看別人,再想想自己,會發現問題的核心其實就在你身旁。這是第一篇 demo勢必能夠左右未來。波爾克說過一句很有意思的話,讀書而不思考,等於吃飯而不消化。這啟發了我。斯特林堡說過一句發人省思的話,生活的目的究竟是什麼?是生活本身!除把生命維持到死以處不會再有其他任務。人因此而獲得維持生命的力量。這句話看似簡單,但其中的陰鬱不禁讓人深思。",
"version": 1,
"isDeleted": false,
"createdAt": "2021-01-09T09:37:58.000Z",
"updatedAt": "2021-01-09T09:37:58.000Z"
},
{
"id": 2,
"title": "晚餐要吃什麼",
"authorId": 3,
"eventId": 2,
"category": "other",
"open": false,
"anonymous": true,
"content": " 第歐根尼說過一句著名的話,太陽也光顧污穢之地,但並沒有因此而被玷污。想必各位已經看出了其中的端倪。朱耀燮告訴我們,在愛情方面,女人可能是很堅強的,也可能是很懦弱的。要么是愛別人,要么是接受別人的愛,一旦陷入情網之後,就是有人命令她朝火裡鑽,她也會心甘情願服從的。這段話雖短,卻足以改變人類的歷史。回過神才發現,思考晚餐要吃什麼的存在意義,已讓我廢寢忘食。我們都很清楚,這是個嚴謹的議題。儘管如此,我們仍然需要對晚餐要吃什麼保持懷疑的態度。現在,正視晚餐要吃什麼的問題,是非常非常重要的。因為,其實,若思緒夠清晰,那麼晚餐要吃什麼也就不那麼複雜了。晚餐要吃什麼的出現,必將帶領人類走向更高的巔峰。可是,即使是這樣,晚餐要吃什麼的出現仍然代表了一定的意義。俗話說的好,掌握思考過程,也就掌握了晚餐要吃什麼。每個人都不得不面對這些問題。在面對這種問題時,務必詳細考慮晚餐要吃什麼的各種可能。如果仔細思考晚餐要吃什麼,會發現其中蘊含的深遠意義。深入的探討晚餐要吃什麼,是釐清一切的關鍵。我們不得不相信,希臘曾經說過,無論誰,只要他還活著,你就不能稱他是幸福的。這把視野帶到了全新的高度。泰戈爾曾提出,你若愛她,讓你的愛像陽光一樣包圍她,並且給她自由。這啟發了我。/n/n探討晚餐要吃什麼時,如果發現非常複雜,那麼想必不簡單。",
"version": 1,
"isDeleted": false,
"createdAt": "2021-01-09T09:37:58.000Z",
"updatedAt": "2021-01-09T09:37:58.000Z"
},
{
"id": 3,
"title": "這是第一篇 demo",
"authorId": 3,
"eventId": 1,
"category": "novel",
"open": true,
"anonymous": false,
"content": "若能夠欣賞到這是第一篇 demo的美,相信我們一定會對這是第一篇 demo改觀。這是第一篇 demo,發生了會如何,不發生又會如何。那麼,本人也是經過了深思熟慮,在每個日日夜夜思考這個問題。對於這是第一篇 demo,我們不能不去想,卻也不能走火入魔。面對如此難題,我們必須設想周全。這是第一篇 demo似乎是一種巧合,但如果我們從一個更大的角度看待問題,這似乎是一種不可避免的事實。這樣看來,從這個角度來看,這是不可避免的。/n/n一般來講,我們都必須務必慎重的考慮考慮。在這種不可避免的衝突下,我們必須解決這個問題。如果仔細思考這是第一篇 demo,會發現其中蘊含的深遠意義。世界上若沒有這是第一篇 demo,對於人類的改變可想而知。我想,把這是第一篇 demo的意義想清楚,對各位來說並不是一件壞事。看看別人,再想想自己,會發現問題的核心其實就在你身旁。這是第一篇 demo勢必能夠左右未來。波爾克說過一句很有意思的話,讀書而不思考,等於吃飯而不消化。這啟發了我。斯特林堡說過一句發人省思的話,生活的目的究竟是什麼?是生活本身!除把生命維持到死以處不會再有其他任務。人因此而獲得維持生命的力量。這句話看似簡單,但其中的陰鬱不禁讓人深思。",
"version": 1,
"isDeleted": false,
"createdAt": "2021-01-09T09:37:58.000Z",
"updatedAt": "2021-01-09T09:37:58.000Z"
}
]
}
```
#### 取得單一活動 (2022/02/22 更新)
Response Example
```json=
{
"ok": 1,
"work": {
"id": 2,
"title": "晚餐要吃什麼",
"authorId": 3,
"eventId": 2,
"category": "other",
"open": false,
"anonymous": true,
"content": " 第歐根尼說過一句著名的話,太陽也光顧污穢之地,但並沒有因此而被玷污。想必各位已經看出了其中的端倪。朱耀燮告訴我們,在愛情方面,女人可能是很堅強的,也可能是很懦弱的。要么是愛別人,要么是接受別人的愛,一旦陷入情網之後,就是有人命令她朝火裡鑽,她也會心甘情願服從的。這段話雖短,卻足以改變人類的歷史。回過神才發現,思考晚餐要吃什麼的存在意義,已讓我廢寢忘食。我們都很清楚,這是個嚴謹的議題。儘管如此,我們仍然需要對晚餐要吃什麼保持懷疑的態度。現在,正視晚餐要吃什麼的問題,是非常非常重要的。因為,其實,若思緒夠清晰,那麼晚餐要吃什麼也就不那麼複雜了。晚餐要吃什麼的出現,必將帶領人類走向更高的巔峰。可是,即使是這樣,晚餐要吃什麼的出現仍然代表了一定的意義。俗話說的好,掌握思考過程,也就掌握了晚餐要吃什麼。每個人都不得不面對這些問題。在面對這種問題時,務必詳細考慮晚餐要吃什麼的各種可能。如果仔細思考晚餐要吃什麼,會發現其中蘊含的深遠意義。深入的探討晚餐要吃什麼,是釐清一切的關鍵。我們不得不相信,希臘曾經說過,無論誰,只要他還活著,你就不能稱他是幸福的。這把視野帶到了全新的高度。泰戈爾曾提出,你若愛她,讓你的愛像陽光一樣包圍她,並且給她自由。這啟發了我。/n/n探討晚餐要吃什麼時,如果發現非常複雜,那麼想必不簡單。",
"version": 1,
"isDeleted": false,
"createdAt": "2021-01-09T09:37:58.000Z",
"updatedAt": "2021-01-09T09:37:58.000Z"
}
}
```
#### 顯示 Tag 搜尋結果
query:
```
_offset:預設 0
_limit:預設 10
_sort:預設 DESC
_order:預設 createdAt
_keyword:要搜尋的關鍵字
```
Response Example
```json
{
"ok": 1,
"tags": [
{
"id": 5,
"content": "奇幻小說",
"createdAt": "2021-01-09T07:33:21.000Z",
"updatedAt": "2021-01-09T07:33:21.000Z"
}
]
}
```