/Twitter-Clone-API

This project is a Twitter clone API that mimics the basic functionalities of Twitter. It provides a set of APIs to perform various operations such as user registration, login, tweet creation, following users, viewing tweets, and more.

Primary LanguageJavaScript

Twitter Clone API

This project is a Twitter clone API that mimics the basic functionalities of Twitter. It provides a set of APIs to perform various operations such as user registration, login, tweet creation, following users, viewing tweets, and more.

Features

  • User registration and login
  • Creating and deleting tweets
  • Following and followers functionality
  • Viewing tweets of followed users
  • Retrieving user-specific tweets, likes, and replies - Detailed information about a specific tweet`

Written APIs to perform operations on the tables user, follower, tweet, reply, and like containing the following columns,

User Table

Column Type
user_id INTEGER
name TEXT
username TEXT
password TEXT
gender TEXT

Follower Table

Column Type
follower_id INTEGER
follower_user_id INTEGER
following_user_id INTEGER

Here, if user1 follows user2 then,

follower_user_id is the user ID of user1 and following_user_id is the user ID of user2.

Tweet Table

Column Type
tweet_id INTEGER
tweet TEXT
user_id INTEGER
date_time DATETIME

Reply Table

Column Type
reply_id INTEGER
tweet_id INTEGER
reply TEXT
user_id INTEGER
date_time DATETIME

Like Table

Column Type
like_id INTEGER
tweet_id INTEGER
user_id INTEGER
date_time DATETIME

Sample Valid User Credentials

{
  "username":"JoeBiden",
  "password":"biden@123"
}

API 1

Path: /register/

Method: POST

Request

{
  "username": "adam_richard",
  "password": "richard_567",
  "name": "Adam Richard",
  "gender": "male"
}
  • Scenario 1

    • Description:

      If the username already exists

    • Response

      • Status code
        400
        
      • Body
        User already exists
        
  • Scenario 2

    • Description:

      If the registrant provides a password with less than 6 characters

    • Response

      • Status code
        400
        
      • Body
        Password is too short
        
  • Scenario 3

    • Description:

      Successful registration of the registrant

    • Response

      • Status code

        200
        
      • Body

        User created successfully
        

API 2

Path: /login/

Method: POST

Request

{
  "username":"JoeBiden",
  "password":"biden@123"
}
  • Scenario 1

    • Description:

      If the user doesn't have a Twitter account

    • Response

      • Status code
        400
        
      • Body
        Invalid user
        
  • Scenario 2

    • Description:

      If the user provides an incorrect password

    • Response

      • Status code
        400
        
      • Body
        Invalid password
        
  • Scenario 3

    • Description:

      Successful login of the user

    • Response

      Return the JWT Token

      {
        "jwtToken": "ak2284ns8Di32......"
      }
      

Authentication with JWT Token

Written middleware to authenticate the JWT token.

  • Scenario 1

    • Description:

      If the JWT token is not provided by the user or an invalid JWT token is provided

    • Response

      • Status code
        401
        
      • Body
        Invalid JWT Token
        
  • Scenario 2

    • After successful verification of JWT token, proceed to next middleware or handler

API 3

Path: /user/tweets/feed/

Method: GET

Description:

Returns the latest tweets of people whom the user follows. Return 4 tweets at a time

Response

 [
   {
      username: "SrBachchan",
      tweet: "T 3859 - do something wonderful, people may imitate it ..",
      dateTime: "2021-04-07 14:50:19"
   },
   ...
 ]

API 4

Path: /user/following/

Method: GET

Description:

Returns the list of all names of people whom the user follows

Response

[
  {
    "name": "Narendra Modi"
  },
  ...
]

API 5

Path: /user/followers/

Method: GET

Description:

Returns the list of all names of people who follows the user

Response

[
  {
    "name": "Narendra Modi"
  },
  ...
]

API 6

Path: /tweets/:tweetId/

Method: GET

  • Scenario 1

    • Description:

      If the user requests a tweet other than the users he is following

    • Response

      • Status code
        401
        
      • Body
        Invalid Request
        
  • Scenario 2

    • Description:

      If the user requests a tweet of the user he is following, return the tweet, likes count, replies count and date-time

    • Response

      {
         "tweet": "T 3859 - do something wonderful, people may imitate it ..",
         "likes": 3,
         "replies": 1,
         "dateTime": "2021-04-07 14:50:19"
      }
      

API 7

Path: /tweets/:tweetId/likes/

Method: GET

  • Scenario 1

    • Description:

      If the user requests a tweet other than the users he is following

    • Response

      • Status code
        401
        
      • Body
        Invalid Request
        
  • Scenario 2

    • Description:

      If the user requests a tweet of a user he is following, return the list of usernames who liked the tweet

    • Response

      {
         "likes": ["albert", ]
      }
      

API 8

Path: /tweets/:tweetId/replies/

Method: GET

  • Scenario 1

    • Description:

      If the user requests a tweet other than the users he is following

    • Response

      • Status code
        401
        
      • Body
        Invalid Request
        
  • Scenario 2

    • Description:

      If the user requests a tweet of a user he is following, return the list of replies.

    • Response

      ```
      {
         "replies": [
           {
             "name": "Narendra Modi",
             "reply": "When you see it.."
            },
          ...]
      }
      ```
      

API 9

Path: /user/tweets/

Method: GET

Description:

Returns a list of all tweets of the user

Response

[
  {
    "tweet": "Ready to don the Blue and Gold",
    "likes": 3,
    "replies": 4,
    "dateTime": "2021-4-3 08:32:44"
  },
  ...
]

API 10

Path: /user/tweets/

Method: POST

Description:

Create a tweet in the tweet table

Request

{
   "tweet": "The Mornings..."
}

Response

Created a Tweet

API 11

Path: /tweets/:tweetId/

Method: DELETE

  • Scenario 1

    • Description:

      If the user requests to delete a tweet of other users

    • Response

      • Status code
        401
        
      • Body
        Invalid Request
        
  • Scenario 2

    • Description:

      If the user deletes his tweet

    • Response

      Tweet Removed