Skip to content

haikalgakbar/assignment04-forumapp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

API Design for Forum App

Requirement / User Stories

  • 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

Core Entity

Users

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",
  ],
}

Threads

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",
  ],
}

Comments

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...",
}

Endpoint

Auth

Name Method Endpoint
Register POST /auth/register
Login POST /auth/login
Logout GET /auth/logout

Register

Request Body
Name Value
email 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.

Login

Request Body
Name Value
email 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.

Logout

Response
Type Status Code Message
Success 201 Logout success.
Error in client 404 Unauthorized
Error in server 500 Error from server.

Thread

Name Method Endpoint
Create thread POST /api/threads
Create reply POST /api/threads/:id

Create thread

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.

Create reply

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.

User

Name Method Endpoint
Update profile PATCH /users/:id
Bookmark thread POST /users/:id/bookmarks
Remove bookmark DELETE /users/:id/bookmarks

Update profile

Request Body
Name Value
email 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.

Bookmark thread

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.

Remove bookmark

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.

Other Endpoint

Name Method Endpoint
Get all threads GET /api/threads
Get all users GET /api/users

Get all threads

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.

Get all users

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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published