- As a user, I want to be able to Register
- As a user, I want to be able to Log In
- As a user, I want to be able to Create new Thread
- As a user, I want to be able to Create new Reply (on a Thread)
- As a user I want to be able to Update my Personal profile
- As a user, I want to be able to Save/Bookmark Threads
- As a user, I want to be able to UnSave/UnBM Threads
| name | type |
|---|---|
_id |
ObjectId |
__v |
Number |
email |
String |
password |
String |
user_name |
String |
display_name |
String |
avatar_url |
String? |
bookmarks |
[ObjectId(Threads)]? |
JSON example
{
"_id": "6639a3d06f5ad817adcd0e2c",
"__v": 0,
"email": "[email protected]",
"password": "$2b$12$UY6RrT5VbjdwpQkrBmmb7.A7OTsbjo1zvKU3FVMoJqtchKGelD8FS",
"user_name": "haikalgakbar",
"display_name": "haikalgakbar",
"avatar_url": "cdn.example.com/img/1.jpg",
"bookmarks": [
"663734b04bebd3fa7b61d0dd",
],
}| name | type |
|---|---|
_id |
ObjectId |
__v |
Number |
sender |
ObjectId(Users) |
title |
String |
content |
String |
img |
String? |
comments |
[ObjectId(Comments)]? |
JSON example
{
"_id": "663734b04bebd3fa7b61d0dd",
"__v": 0,
"sender": "66372c69cc86e6b1c94167a7",
"title": "Ngeri! Lorem Ipsum Sit Dolor Amet",
"content": "Lorem ipsum sit dolor amet...",
"img": "cdn.example.com/thread/img/1.jpg",
"comments": [
"663734b04bebd3fa7b61d0dd",
],
}| name | type |
|---|---|
_id |
ObjectId |
__v |
Number |
sender |
ObjectId(Users) |
thread |
ObjectId(Threads) |
content |
String |
JSON example
{
"_id": "663734b04bebd3fa7b61d0dd",
"__v": 0,
"sender": "66372c69cc86e6b1c94167a7",
"thread": "66372c69cc86e6b1c94167a7",
"content": "Lorem ipsum sit dolor amet...",
}| Name | Method | Endpoint |
|---|---|---|
| Register | POST |
/auth/register |
| Login | POST |
/auth/login |
| Logout | GET |
/auth/logout |
Request Body
| Name | Value | |
|---|---|---|
String |
required |
|
| password | String |
required |
| user_name | String |
required |
| display_name | String |
required |
Example Request Body
{
"email": "[email protected]",
"password": "123",
"user_name": "haikalgakbar",
"display_name": "haikalgakbar",
}Response
| Type | Status Code | Message |
|---|---|---|
Success |
201 |
Add new user success. |
Error in client |
400 |
Invalid data. / Data must be string. |
Error in server |
500 |
Error from server. |
Request Body
| Name | Value | |
|---|---|---|
String |
required |
|
| password | String |
required |
Example Request Body
{
"email": "[email protected]",
"password": "123",
}Response
| Type | Status Code | Message |
|---|---|---|
Success |
201 |
Login success. |
Error in client |
404 |
Incorrect email or password |
Error in server |
500 |
Error from server. |
Response
| Type | Status Code | Message |
|---|---|---|
Success |
201 |
Logout success. |
Error in client |
404 |
Unauthorized |
Error in server |
500 |
Error from server. |
| Name | Method | Endpoint |
|---|---|---|
| Create thread | POST |
/api/threads |
| Create reply | POST |
/api/threads/:id |
Request Body
| Name | Value | |
|---|---|---|
| title | String |
required |
| content | String |
required |
| img | String |
Example Request Body
{
"title": "Ngeri! Lorem Ipsum Sit Dolor Amet",
"content": "Lorem ipsum sit dolor amet...",
"img": "cdn.example.com/thread/img/1.jpg",
}Response
| Type | Status Code | Message |
|---|---|---|
Success |
201 |
Add new thread success. |
Error in client |
400 |
Invalid sender ID. / Sender not found. / Data must be in string. |
Error in server |
500 |
Error from server. |
Request Body
| Name | Value | |
|---|---|---|
| content | String |
required |
Example Request Body
{
"content": "Lorem ipsum sit dolor amet...",
}Response
| Type | Status Code | Message |
|---|---|---|
Success |
201 |
Add new comment success. |
Error in client |
400 |
Invalid thread ID. / Invalid user ID. / Must include comment. / Comment must be in string. |
Error in server |
500 |
Error from server. |
| Name | Method | Endpoint |
|---|---|---|
| Update profile | PATCH |
/users/:id |
| Bookmark thread | POST |
/users/:id/bookmarks |
| Remove bookmark | DELETE |
/users/:id/bookmarks |
Request Body
| Name | Value | |
|---|---|---|
String |
||
| password | String |
|
| user_name | String |
|
| display_name | String |
|
| avatar_url | String |
Example Request Body
{
"email": "haikalgakbar@gmail",
"password": "123",
"user_name": "haikalgakbar",
"display_name": "haikalgakbar",
"avatar_url": "cdn.example.com/img/1.jpg",
}Response
| Result | Status Code | Message |
|---|---|---|
Success |
201 |
Update user success. |
Error in client |
400 |
Invalid ID. / User not found. |
Error in server |
500 |
Error from server. |
Request Body
| Name | Value | |
|---|---|---|
| thread | ObjectId(Thread) |
required |
Example Request Body
{
"thread": "66372ee9ddc309fdfffa1666",
}Response
| Type | Status Code | Message |
|---|---|---|
Success |
201 |
Bookmark added. |
Error in client |
400 |
Invalid user id. / User not found. / Invalid thread id. / Thread not found |
Error in server |
500 |
Error from server. |
Request Body
| Name | Value | |
|---|---|---|
| thread | ObjectId(Thread) |
required |
Example Request Body
{
"thread": "66372ee9ddc309fdfffa1666",
}Response
| Type | Status Code | Message |
|---|---|---|
Success |
201 |
Bookmark removed. |
Error in client |
400 |
Invalid user id. / User not found. / Invalid thread id. / Thread not found |
Error in server |
500 |
Error from server. |
| Name | Method | Endpoint |
|---|---|---|
| Get all threads | GET |
/api/threads |
| Get all users | GET |
/api/users |
Example result
[
{
"_id": "663efe6ebacf7217e95a3221",
"sender": {
"_id": "663dd5950f58423d8b9ce6a6",
"email": "[email protected]",
"user_name": "change password to 12345",
"display_name": "test",
"avatar_url": ""
},
"title": "Test Title",
"content": "Test content",
"img": "",
"comments": [
{
"_id": "663f17756b0c7ed28245e02b",
"sender": {
"user_name": "change password to 12345",
"display_name": "test",
"avatar_url": ""
},
"content": "test comment"
}
],
"__v": 0
}
]Response
| Type | Status Code | Message |
|---|---|---|
Success |
201 |
|
Error in server |
500 |
Error from server. |
Example result
[
{
"_id": "6639a3d06f5ad817adcd0e2c",
"email": "[email protected]",
"password": "$2b$12$UY6RrT5VbjdwpQkrBmmb7.A7OTsbjo1zvKU3FVMoJqtchKGelD8FS",
"user_name": "haikalgakbar",
"display_name": "haikalgakbar",
"avatar_url": "",
"bookmarks": [
{
"_id": "663efe6ebacf7217e95a3221",
"sender": {
"_id": "663dd5950f58423d8b9ce6a6",
"user_name": "change password to 12345",
"display_name": "test",
"avatar_url": ""
},
"title": "Test Title",
"content": "Test content"
}
],
"__v": 0
}
]Response
| Type | Status Code | Message |
|---|---|---|
Success |
201 |
|
Error in server |
500 |
Error from server. |