UNPKG

northwind-rest-api

Version:

Local REST API Exposing 'Northwind Traders' Database.

156 lines (130 loc) 6.9 kB
# 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 |