API for a blog app built with NodeJS, all blogposts are stored in a MongoDB database, some routes are only accessible by logged in users.
- POST
/signup
: Creates a new User and logs them in
- POST
/login
: Logs an existing user in
- POST
/logout
: Logs out an existing user
- GET
/blog/
: Gets all available blogposts
- GET
/blog/user
: Gets all blogposts by a particulare user
- GET
/blog/:id
: Gets a blogpost
- POST
/blog/
: Creates a new blogpost
- DELETE
/blog/:id
: Deletes a blogpost
- PUT
/blog/:id
: Updates a blogpost
- Users should have a first name, last name, email, password.
- A user should be able to sign up and sign in into the blog app
- Use JWT as authentication strategy and expire the token after 1 hour
- A blog can be in two states; draft and published
- Logged in and not logged in users should be able to get a list of published blogs created
- Logged in and not logged in users should be able to to get a published blog
- Logged in users should be able to create a blog.
- When a blog is created, it is in draft state
- The owner of the blog should be able to update the state of the blog to published
- The owner of a blog should be able to edit the blog in draft or published state
- The owner of the blog should be able to delete the blog in draft or published state
- The owner of the blog should be able to get a list of their blogs.
- The endpoint should be paginated and filterable by state
- When a single blog is requested, the api should return the user information(the author) with the blog. The read_count of the blog too should be updated by 1.
- Install NodeJS, mongodb
- Fork and Pull this repository
- Install dependencies by running
npm install
in the root directory
- Add enviromental variables in the following format:
- PORT = "PORT"
- DB_URI = "MongoDB connection URI"
- JWT_SECRET = "Secret key"
- Run
npm run start
field |
data_type |
constraints |
id |
string |
required |
firstName |
string |
required |
lastName |
string |
required |
email |
string |
required |
password |
string |
required |
blogs |
array |
required |
field |
data_type |
constraints |
id |
string |
Auto-generated |
title |
string |
required, unique |
state |
string |
default: "draft" |
description |
string |
required |
author |
string |
Auto-generated |
reading_time |
string |
Auto-generated |
read_count |
number |
Auto-generated |
tags |
array |
required |
body |
atring |
required |