Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/das-jishu/restful-api-for-article-manager
A RESTful API made using NodeJS (Express) and MongoDB (mongoose) to manage a platform where users (or authors) can signup and collaborate on different articles, leave reviews and organize their work.
https://github.com/das-jishu/restful-api-for-article-manager
api api-rest article article-manager authentication github heroku node node-js nodejs nodemon postman routes
Last synced: 5 days ago
JSON representation
A RESTful API made using NodeJS (Express) and MongoDB (mongoose) to manage a platform where users (or authors) can signup and collaborate on different articles, leave reviews and organize their work.
- Host: GitHub
- URL: https://github.com/das-jishu/restful-api-for-article-manager
- Owner: das-jishu
- Created: 2020-07-18T03:44:01.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-02-01T22:31:18.000Z (about 2 years ago)
- Last Synced: 2024-12-14T13:41:36.846Z (about 2 months ago)
- Topics: api, api-rest, article, article-manager, authentication, github, heroku, node, node-js, nodejs, nodemon, postman, routes
- Language: JavaScript
- Homepage: https://article-manager-using-rest-api.herokuapp.com/
- Size: 178 KB
- Stars: 1
- Watchers: 2
- Forks: 1
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# RESTful-API-for-article-manager
A RESTful API made using NodeJS (Express) and MongoDB (mongoose) to manage a platform where users (or authors) can signup and collaborate on different articles, leave reviews and organize their work.
[![MIT license](https://img.shields.io/badge/License-MIT-blue.svg)](https://lbesson.mit-license.org/)
------------------------------------------------------------------------------------------------------------------------------------------
### NOTE:###### This repo contains only the backend implementation of the project. Users are free to develop their own frontend using this. Follow the Readme to know the routes and their implementation.
-------------------------------------------------------------------------------------------------------------------------------------
## HOW TO
- Fork the repository and clone it.
- Head over to MongoDB Atlas and create a free cluster.
- Add a *config.env* to store all the environment variables.
###### List of environment variables to be written:
- DATABASE
- DATABASE_PASSWORD
- PORT
- NODE_ENV
- JWT_SECRET
- JWT_EXPIRES_IN
- JWT_COOKIE_EXPIRES_IN
- EMAIL_USERNAME
- EMAIL_PASSWORD
- EMAIL_HOST
- EMAIL_PORT##### NOTE:
- I have used smtp.google.com to queue and send mails but feel free to use any other smtp you might prefer.
- Replace the DATABASE variable with your own MongoDB link and the DATABASE_PASSWORD with your password.
- Open the terminal and run the following command:
```
node server.js
```
- You can also use nodemon to run the app. If you don't have nodemon installed, follow this:
```
npm i nodemon
nodemon server.js
```
- That's it! Now make any changes you require for your own project and handle the front-end accordingly. The routes are listed below.--------------------------------------------------------------------------------------------------------------
### ROUTES:
##### User Routes: /api/v1/users
Protected routes can only be accessed by logged in users. To access these routes, pass a bearer authentication token along with the request.
For POST and PATCH, pass required parameters as JSON in request body.- POST /signup -- To signup a new user (name, email, password, confirmPassword).
- POST /login -- To login (email, password).
- POST /forgotPassword -- In case an user forgets his password. A mail is sent to the user's email address (email).
- PATCH /resetPassword/:token -- To reset password (password, passwordConfirm).- (*protected*) PATCH /updateMyPassword -- To update password for logged in user (currentPassword, password, passwordConfirm).
- (*protected*) GET /me -- To get details of current logged in user.
- (*protected*) PATCH /updateMe -- Update details of current logged in user (:any).
- (*protected*) DELETE /deleteMe -- Delete current user.- (*protected, restricted to admin*) GET / -- Get all users.
- (*protected, restricted to admin*) GET /:id -- Get a specific user by id.
- (*protected, restricted to admin*) PATCH /:id -- Update a specific user (:any).
- (*protected, restricted to admin*) DELETE /:id -- Delete an user.------------------------------------------------------------------------------------------------------------------------------------
##### Article Routes: /api/v1/articles
Protected routes can only be accessed by logged in users. To access these routes, pass a bearer authentication token along with the request.
For POST and PATCH, pass required parameters as JSON in request body.- GET /top-5-rated -- Get the top 5 rated articles.
- GET / -- Get all articles.
- GET /:id -- Get a particular article by id.- (*protected*) POST / -- Create a new article (body, headline, location, collaborators).
- (*protected, restricted to admin, editor*) PATCH /:id -- Update a particular article by id (:any).
- (*protected, restricted to admin*) DELETE /:id -- Delete a particular article.--------------------------------------------------------------------------------------------------------------------------------------
##### Review Routes: /api/v1/reviews
Protected routes can only be accessed by logged in users. To access these routes, pass a bearer authentication token along with the request.
For POST and PATCH, pass required parameters as JSON in request body.- (*protected*) GET / -- Get all the reviews.
- (*protected, restricted to user*) POST / -- Create a new review (rating, article, review).
- (*protected*) GET /:id -- Get a review based on id.
- (*protected, restricted to admin, user*) PATCH /:id -- Update a review based on id (:any).
- (*protected, restricted to admin, user*) DELETE /:id -- Delete a review based on id.-----------------------------------------------------------------------------------------------------------------------------------------
##### API Features:
- Sorting: ?sort=field1,-field2 -- Sorts results first using field1 (ascending), then for same field1 values field2 (decreasing) is used and so on.
- Paginate: ?limit=l&page=p -- Results are divided into pages. Each page contains l results and page number p is returned.
- Select: ?fields=field1,field2 -- Selects only field1, field2 from the result documents.
- Filter: ?query -- Filter results based on the query.---------------------------------------------------------------------------------------------------------------------------------------------
#### Author: Subham Das.
[![MIT license](https://img.shields.io/badge/License-MIT-blue.svg)](https://lbesson.mit-license.org/)