- 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. |