Given an app.js file and a database file twitterClone.db consisting of five tables user, follower, tweet, reply, and like.
Write 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......" }
-
Write a 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
-
Use npm install to install the packages.
Export the express instance using the default export syntax.
Use Common JS module syntax.