northwind-rest-api
Version:
Local REST API Exposing 'Northwind Traders' Database.
156 lines (130 loc) • 6.9 kB
Markdown
# northwind-rest-api
A local REST API for Northwind database, containing products, employees, suppliers, categories, authentication and more.
## Installation:
```bash
npm i -g northwind-rest-api
```
(You must install it globally using the ```-g``` flag so the backend could be started via command-line.)
## CLI Commands:
- Run the REST API:
```bash
northwind
```
- Display help:
```bash
northwind --help
```
- Display version:
```bash
northwind --version
```
## Existing Users:
1. Admin User:
- Email: john.smith@gmail.com
- Password: 123456
2. Regular User:
- Email: mary.taylor@gmail.com
- Password: 123456
## Endpoints:
### Products:
- ```GET``` ```http://localhost:3030/api/products``` → Get all products.
- ```GET``` ```http://localhost:3030/api/products/7``` → Get product with id 7.
- ```POST``` ```http://localhost:3030/api/products``` → Add a new product.
- ```PUT``` ```http://localhost:3030/api/products/7``` → Update product with id 7.
- ```DELETE``` ```http://localhost:3030/api/products/7``` → Delete product with id 7.
- ```GET``` ```http://localhost:3030/api/products/images/01a5a6d5-6cc4-4e72-8f5d-e44efd3bc3d7.jpg``` → Get that product's image.
- ```GET``` ```http://localhost:3030/api/products/top-three``` → Get top three products (must be logged-in).
- ```GET``` ```http://localhost:3030/api/products/out-of-stock``` → Get out-of-stock products (must be admin).
### Employees:
- ```GET``` ```http://localhost:3030/api/employees``` → Get all employees.
- ```GET``` ```http://localhost:3030/api/employees/7``` → Get employee with id 7.
- ```POST``` ```http://localhost:3030/api/employees``` → Add a new employee.
- ```PUT``` ```http://localhost:3030/api/employees/7``` → Update employee with id 7.
- ```DELETE``` ```http://localhost:3030/api/employees/7``` → Delete employee with id 7.
- ```GET``` ```http://localhost:3030/api/employees/images/01a5f7d1-42e8-4f71-83c4-58e86751b272.jpg``` → Get that employee's image.
### Suppliers:
- ```GET``` ```http://localhost:3030/api/suppliers``` → Get all suppliers.
- ```GET``` ```http://localhost:3030/api/suppliers/7``` → Get supplier with id 7.
- ```POST``` ```http://localhost:3030/api/suppliers``` → Add a new supplier.
- ```PUT``` ```http://localhost:3030/api/suppliers/7``` → Update supplier with id 7.
- ```DELETE``` ```http://localhost:3030/api/suppliers/7``` → Delete supplier with id 7.
- ```GET``` ```http://localhost:3030/api/suppliers/images/01a57fe7-0f02-45e3-968b-65264020dd46.jpg``` → Get that supplier's image.
### Categories:
- ```GET``` ```http://localhost:3030/api/categories``` → Get all categories (must be logged-in).
- ```GET``` ```http://localhost:3030/api/categories/7``` → Get category with id 7 (must be logged-in).
- ```POST``` ```http://localhost:3030/api/categories``` → Add a new category (must be logged-in).
- ```PUT``` ```http://localhost:3030/api/categories/7``` → Update category with id 7 (must be logged-in).
- ```DELETE``` ```http://localhost:3030/api/categories/7``` → Delete category with id 7 (must be admin).
- ```GET``` ```http://localhost:3030/api/categories/images/01a1f85a-335e-4797-82b4-4c53d3aacb73.jpg``` → Get that category's image.
### Contact Us:
- ```POST``` ```http://localhost:3030/api/contact-us``` → Add a new contact-us message.
- ```GET``` ```http://localhost:3030/api/contact-us``` → Get all contact-us messages (must be admin).
### Auth:
- ```POST``` ```http://localhost:3030/api/register``` → Register as a new user.
- ```POST``` ```http://localhost:3030/api/login``` → Login as an existing user.
- ```POST``` ```http://localhost:3030/api/refresh-token``` → Get back a new token (must be logged-in).
## Slow Server Simulation:
For simulating a slow server you can precede each endpoint (besides image endpoints) with the word "delay".
This will cause a 3 seconds delay for that route.
This can help test how your frontend behaves when performing an http request to a slow server.
### Examples:
- ```GET``` ```http://localhost:3030/api/products``` → Gets all products without any delay.
- ```GET``` ```http://localhost:3030/delay/api/products``` → Gets all products after a 3 seconds delay.
- ```GET``` ```http://localhost:3030/api/employees/7``` → Gets employee with id 7 without any delay.
- ```GET``` ```http://localhost:3030/delay/api/employees/7``` → Gets employee with id 7 after a 3 seconds delay.
- ```POST``` ```http://localhost:3030/api/suppliers``` → Adds a new supplier without any delay.
- ```POST``` ```http://localhost:3030/delay/api/suppliers``` → Adds a new supplier after a 3 seconds delay.
## Entities:
### User:
| Property | Description |
|------------|-------------------|
| id | User's ID |
| firstName | User's first name |
| lastName | User's last name |
| email | User's email |
| password | User's password |
| role | User's role |
### Product:
| Property | Description |
|------------|--------------------------------|
| id | Product's ID |
| name | Product's name |
| price | Product's price |
| stock | Available stock of the product |
| imageUrl | URL of the product's image |
### Employee:
| Property | Description |
|------------|-----------------------------|
| id | Employee's ID |
| firstName | Employee's first name |
| lastName | Employee's last name |
| title | Employee's job title |
| country | Employee's country |
| city | Employee's city |
| birthDate | Employee's birth date |
| imageUrl | URL of the employee's image |
### Supplier:
| Property | Description |
|------------|-----------------------------|
| id | Supplier's ID |
| company | Supplier's company name |
| country | Supplier's country |
| city | Supplier's city |
| address | Supplier's address |
| phone | Supplier's phone number |
| imageUrl | URL of the supplier's image |
### Category:
| Property | Description |
|--------------|-----------------------------|
| id | Category's ID |
| name | Category's name |
| description | Description of the category |
| imageUrl | URL of the category's image |
### Contact Us Message:
| Property | Description |
|------------|-------------------------|
| id | Contact's ID |
| name | Contact's name |
| email | Contact's email address |
| phone | Contact's phone number |
| message | Contact's message |