Node.js Masterclass Homework Assignment
This repository contains the homework assignment for Node.js Master Class by Pirple that is focused on building a RESTful API, web app GUI, and a CLI in plain Node JS (ES6 Javascript) with no NPM or 3rd-party libraries.
Homework Assignments
Assignment #1: Backend
You are building the API for a pizza-delivery company.
Here's the spec from your project manager:
- New users can be created, their information can be edited, and they can be deleted. We should store their name, email address, and street address.
- Users can log in and log out by creating or destroying a token.
- When a user is logged in, they should be able to GET all the possible menu items (these items can be hardcoded into the system).
- A logged-in user should be able to fill a shopping cart with menu items
- A logged-in user should be able to create an order. You should integrate with the Sandbox of Stripe.com to accept their payment. Note: Use the stripe sandbox for your testing. Follow this link and click on the "tokens" tab to see the fake tokens you can use server-side to confirm the integration is working.
- When an order is placed, you should email the user a receipt. You should integrate with the sandbox of Mailgun.com for this. Note: Every Mailgun account comes with a sandbox email account domain ([email protected]) that you can send from by default. So, there's no need to setup any DNS for your domain for this task. Read more here.
Assignment #2: Frontend
It is time to build a simple frontend for the Pizza-Delivery API you created in Homework Assignment #2. Please create a web app that allows customers to:
- SignUp on the site.
- View all the items available to order.
- Fill up a shopping cart.
- Place an order (with fake credit card credentials), and receive an email receipt
Assignment #3: Admin CLI
It is time to build the Admin CLI for the pizza-delivery app you built in the previous assignments. Please build a CLI interface that would allow the manager of the pizza place to:
- View all the current menu items.
- View all the recent orders in the system (orders placed in the last 24 hours).
- Lookup the details of a specific order by order ID.
- View all the users who have signed up in the last 24 hours.
- Lookup the details of a specific user by email address.
The Solution
Launching the Server
Too launch the application please run the following command from the project root folder:
node index.js
You may also run the application in debugging mode:
env NODE_DEBUG=server,stripe,mailgun,cli,workers node index.js
Running the APP for different environments:
NODE_ENV=staging node index.js
The APP is currently supporting staging
(default) and production
environments.
CLI Commands
The following CLI command are available for the execution:
-----------------------------------------------------------------------------------------------------------
CLI Manual
-----------------------------------------------------------------------------------------------------------
exit Kill the CLI (and the rest of the application)
man Show this help page
help Alis of the "man" command
menus Show the list of available menu items (pizzas)
orders View all the recent orders in the system (orders placed in the last 24 hours)
order --{orderId} Lookup the details of a specific order by order ID
users View all the users who have signed up in the last 24 hours
user --{email} Lookup the details of a specific user by email address
-----------------------------------------------------------------------------------------------------------
Front-End
The following paths are available for the user in browser after launching the app.
Index Page
Path: http://localhost:3000/
Login Page
Path: http://localhost:3000/user/session/create
Menu List
Path: http://localhost:3000/menu/list
Shopping Cart
Path: http://localhost:3000/user/cart/read
Checkout Page
Path: http://localhost:3000/user/order/create
Checkout Success Page
Path: http://localhost:3000/user/order/success
User Profile Page
Path: http://localhost:3000/user/account/edit
Back-End (API)
The following endpoints are available from API perspective.
HealthCheck Endpoint
Request example:
curl -X GET http://localhost:3000/ping
User Endpoints
Create the User
Request example:
curl -X POST \
http://localhost:3000/users \
-d '{
"name": "John",
"email": "[email protected]",
"password": "1111",
"address": "San Francisco, CA",
"streetAddress": "Sunset blvd, 15"
}'
Read the User
Request example:
curl -X GET \
'http://localhost:3000/[email protected]' \
-H 'token: 48df0wibmpqz69rzgb5y'
Update the User
Request example:
curl -X PUT \
http://localhost:3000/users \
-H 'Content-Type: application/json' \
-H 'token: 48df0wibmpqz69rzgb5y' \
-d '{
"name": "Bill",
"email": "[email protected]"
}'
Delete the User
Request example:
curl -X DELETE \
'http://localhost:3000/[email protected]' \
-H 'token: b3xg95c3wp0ol1pk46vm'
Token Endpoints
Create the Token
Request example:
curl -X POST \
http://localhost:3000/tokens \
-d '{
"email": "[email protected]",
"password": "1111"
}'
Read the Token
Request example:
curl -X GET 'http://localhost:3000/tokens?id=gjfek6ha08p2x8877mno'
Update (Prolong) the Token
Request example:
curl -X PUT \
http://localhost:3000/tokens \
-H 'Content-Type: application/json' \
-d '{
"id": "gjfek6ha08p2x8877mno"
}'
Delete the Token
Request example:
curl -X DELETE 'http://localhost:3000/tokens?id=bivegzlqhs1z5q4np0yo'
Menu Endpoint
Get the Menu
Request example:
curl -X GET \
http://localhost:3000/menus \
-H 'token: 3c3nld8owylf927r5txu'
Shopping Cart Endpoint
Create Shopping Cart
Request example:
http://localhost:3000/carts \
-H 'token: ket278eemafcehh9vq30'
Read Shopping Cart
Request example:
curl -X GET \
http://localhost:3000/carts \
-H 'token: ket278eemafcehh9vq30'
Delete Shopping Cart
Request example:
curl -X DELETE \
http://localhost:3000/carts \
-H 'token: ket278eemafcehh9vq30'
Update Items in Shopping Cart
Request example:
curl -X PUT \
http://localhost:3000/carts \
-H 'Content-Type: application/json' \
-H 'token: sdvr4w4e85gw8slgycnt' \
-d '{
"id": 4,
"quantity": 2
}
'
Order Endpoint
Create the Order
Request example:
curl -X POST \
http://localhost:3000/orders \
-H 'Content-Type: application/json' \
-H 'token: 8l06rtpic4y4kps54pe4' \
-d '{
"paymentSource": "tok_mastercard"
}'
Read the Order
Request example:
curl -X GET \
'http://localhost:3000/orders?id=un2yhgqoajzmv76fozkd' \
-H 'token: 4dpj97yqr53druol20ru'