northwind-rest-api
A local REST API for Northwind database, containing products, employees, suppliers, categories, authentication and more.
Installation:
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:
northwind
Display help:
northwind --help
Display version:
northwind --version
Existing Users:
- Admin User:
- Email: lisa@gmail.com
- Password: 123456
- Regular User:
- Email: bart@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 |
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 |
Contact's email address | |
phone | Contact's phone number |
message | Contact's message |