First! create the folder structure for data storage: In the same folder as index.js create the following folders .data/ Then inside .data/ users/ tokens/ orders/ carts/
To launch the application use the command line:
PAY_API_KEY= MAIL_API_KEY= node index.js
Enter URL http://localhost:3000
How to Test
- 1.- Log in to the app
- 2.- You'll be redirected to the Menu Form
- 3.- Fill in the quantity for the pizza of your choice
- 4.- Click "Add to Cart" wait for the confirmation of success
- 5.- Click "Pizza Cart" Menu
- 6.- Here you might delete the cart (One cart per customer is allowed) and start over or fill in the credit card fake data (expiration year should be >= current year) Click on "Place Order"
- 7.- On successfull payment you'll be redirected to the order summary page
- 8.- Check Your email for the receipt!
- Method: POST
- Endpoint: /users/
- Required Payload Data:
- name string
- email string
- password string
- streetaddress string
- Returned data:
- code 201 ( Object created)
- code 400 ( Error)
- code 500 ( Internal error)
- Method: GET
- Endpoint: /users/?{email=}
- Required Query String Data:
- email string
- Required Header Data:
- token string -Returned data:
- code 200 ( Object found) - user data: {name, email, stretaddress, carts:[], orders[]}
- code 400 ( Object not found)
- code 500 ( Internal error)
- Method: PUT
- Endpoint: /users/
- Required Payload Data:
- email string
- Optional Payload Data:
- name string
- streetaddress string
- Required Header Data:
- token string
- Returned data:
- code 201 ( Object updated)
- code 400 ( Not found)
- code 500 ( Internal error)
- Method: DELETE
- Endpoint: /users/
- Required Payload Data:
- email string
- Required Header Data:
- token string
- Returned data:
- code 200 ( Object deleted)
- code 500 ( Internal error)
- code 400 (Not found)
- Method: POST
- Endpoint: /login/
- Required Payload Data:
- email string
- password string
- Returned data:
- code 200 ( Object found) - token data: { emal, tokenid, expires}
- code 400 ( Not found)
- code 500 ( Internal error)
- Method: DELETE
- Endpoint: /logout/
- Required Header Data:
- token string
- Returned data:
- code 200 ( Object found)
- code 500 (Internal error)
- code 400 ( Not found)
- Method: POST
- Endpoint: /tokens/
- Required Payload Data:
- email string
- password string
- Returned data:
- code 200 ( Object found) - token data: { emal, tokenid, expires}
- code 500 (Internal error)
- code 400 (not found)
- Method: GET
- Endpoint: /token/?{id=}
- Required Query String Data:
- id string
- Returned data:
- code 200 ( Object found) - token data: { emal, tokenid, expires}
- Method: PUT
- Endpoint: /token/
- Required Payload Data:
- id string
- extend boolean
- Returned data:
- code 200 (Object updated)
- code 400 ( not found)
- Method: DELETE
- Endpoint: /token/?{id=}
- Required Query String Data:
- id string
- Returned data:
- code 200 (Object deleted)
- code 400 (not found)
- code 500 (internal error)
- Method: GET
- Endpoint: /menu/
- Required Header Data:
- token string
- Returned data:
- code 200 (Object found) - menu data: {id, item, value}
- code 400 (not found)
- code 500 (internal error)
- Method: POST
- Endpoint: /cart/
- Required Payload Data:
- email string
- items object {id: number, quantity: number}
- Required Header Data:
- token string
- Returned data:
- code 200 (Object created)
- code 500 (Internal error)
- code 400 (not found)
- Method: GET
- Endpoint: /cart/?{id=}
- Required Query String Data:
- id string
- Required Header Data:
- token string
- Returned data:
- code 200 (Object found) - cart data: { id, email, items:[{id, quantuty}]}
- code 500 (Internal error)
- code 400 (not found)
- Method: PUT
- Endpoint: /cart/
- Required Payload Data:
- items {id, number, quantity}
- Required Header Data:
- token string
- Returned data:
- code 200 ( Object updated)
- code 500 (Internal error)
- code 400 (not found)
- Method: DELETE
- Endpoint: /cart/?{id=}
- Required Query String Data:
- id string
- Required Header Data:
- token string
- Returned data:
- code 200 (Object deleted)
- code 400 (not found)
- code 500 (internal error)
- Method: POST
- Endpoint: /order/
- Required Payload Data:
- cartid string
- creditcard number
- expiration year number
- expiration month number
- Required Header Data:
- token string
- Returned data:
- code 200 (Object created) order data: {id, email, value, paymentstatus, item:[{id, quantity}], date, emailsent, paymentid}
- code 500 (Internal error)
- code 400 (not found)
- Method: GET
- Endpoint: /order/?{id=}
- Required Query String Data:
- orderid string
- Required Header Data:
- token string
- Returned data:
- code 200 (Object found) order data: {id, email, value, paymentstatus, item:[{id, quantity}], date, emailsent, paymentid}
- code 400 (not found)
Worker process will send every 5 minutes an email for every order with payment status "true" and emailsent is false, also will update the "emailsent" field to true on successfull sent.