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.
- User registration and login
- Creating and deleting tweets
- Following and followers functionality
- Viewing tweets of followed users
- Retrieving user-specific tweets, likes, and replies
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 |
{
"username":"JoeBiden",
"password":"biden@123"
}
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
- Status code
-
-
Scenario 2
-
Description:
If the registrant provides a password with less than 6 characters
-
Response
- Status code
400
- Body
Password is too short
- Status code
-
-
Scenario 3
-
Description:
Successful registration of the registrant
-
Response
-
Status code
200
-
Body
User created successfully
-
-
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
- Status code
-
-
Scenario 2
-
Description:
If the user provides an incorrect password
-
Response
- Status code
400
- Body
Invalid password
- Status code
-
-
Scenario 3
-
Description:
Successful login of the user
-
Response
Return the JWT Token
{ "jwtToken": "ak2284ns8Di32......" }
-
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
- Status code
-
-
Scenario 2
- After successful verification of JWT token, proceed to next middleware or handler
Returns the latest tweets of people whom the user follows. Return 4 tweets at a time
[
{
username: "SrBachchan",
tweet: "T 3859 - do something wonderful, people may imitate it ..",
dateTime: "2021-04-07 14:50:19"
},
...
]
Returns the list of all names of people whom the user follows
[
{
"name": "Narendra Modi"
},
...
]
Returns the list of all names of people who follows the user
[
{
"name": "Narendra Modi"
},
...
]
-
Scenario 1
-
Description:
If the user requests a tweet other than the users he is following
-
Response
- Status code
401
- Body
Invalid Request
- Status code
-
-
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" }
-
-
Scenario 1
-
Description:
If the user requests a tweet other than the users he is following
-
Response
- Status code
401
- Body
Invalid Request
- Status code
-
-
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", ] }
-
-
Scenario 1
-
Description:
If the user requests a tweet other than the users he is following
-
Response
- Status code
401
- Body
Invalid Request
- Status code
-
-
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.." }, ...] } ```
-
Returns a list of all tweets of the user
[
{
"tweet": "Ready to don the Blue and Gold",
"likes": 3,
"replies": 4,
"dateTime": "2021-4-3 08:32:44"
},
...
]
Create a tweet in the tweet table
{
"tweet": "The Mornings..."
}
Created a Tweet
-
Scenario 1
-
Description:
If the user requests to delete a tweet of other users
-
Response
- Status code
401
- Body
Invalid Request
- Status code
-
-
Scenario 2
-
Description:
If the user deletes his tweet
-
Response
Tweet Removed
-