An open API service indexing awesome lists of open source software.

https://github.com/mmallikarjun2312/twitter_clone

Twitter_Clone_ExpressJs_Application created using NodeJS, ExpressJS , SQLite in this API's Authenticated users can only perform CRUD operation's in Database. JWT Tokens are used for verification and only he can perform CRUD operations on the database. Middleware functions are used to authenticate if it's a Valid User.
https://github.com/mmallikarjun2312/twitter_clone

apis authentication-middleware bcrypt-hashing-library crud-api databases express-js javascript middleware node-js sqlite3 token-based-authentication twitter-clone

Last synced: 2 months ago
JSON representation

Twitter_Clone_ExpressJs_Application created using NodeJS, ExpressJS , SQLite in this API's Authenticated users can only perform CRUD operation's in Database. JWT Tokens are used for verification and only he can perform CRUD operations on the database. Middleware functions are used to authenticate if it's a Valid User.

Awesome Lists containing this project

README

          

# Twitter

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 |

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

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

- **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
```


Use `npm install` to install the packages.

**Export the express instance using the default export syntax.**

**Use Common JS module syntax.**