From 4c423d64af40e25a0bd61783de7723e71e608536 Mon Sep 17 00:00:00 2001 From: bazmurphy Date: Thu, 11 May 2023 12:50:55 +0100 Subject: [PATCH] all tasks complete, including interactive project site and readme --- 2-exercises/entity-relation-diagram.png | Bin 0 -> 31845 bytes 2-exercises/task.md | 411 +++++++++++++++++- 3-projects/cyf-ecommerce-api/.gitignore | 2 + 3-projects/cyf-ecommerce-api/package.json | 20 + .../cyf-ecommerce-api/project-screenshot.png | Bin 0 -> 37898 bytes .../cyf-ecommerce-api/public/elephant.png | Bin 0 -> 50279 bytes .../cyf-ecommerce-api/public/index.html | 25 ++ 3-projects/cyf-ecommerce-api/public/script.js | 33 ++ 3-projects/cyf-ecommerce-api/public/style.css | 70 +++ 3-projects/cyf-ecommerce-api/readme.md | 28 ++ 3-projects/cyf-ecommerce-api/server.js | 63 +++ 11 files changed, 648 insertions(+), 4 deletions(-) create mode 100644 2-exercises/entity-relation-diagram.png create mode 100644 3-projects/cyf-ecommerce-api/.gitignore create mode 100644 3-projects/cyf-ecommerce-api/package.json create mode 100644 3-projects/cyf-ecommerce-api/project-screenshot.png create mode 100644 3-projects/cyf-ecommerce-api/public/elephant.png create mode 100644 3-projects/cyf-ecommerce-api/public/index.html create mode 100644 3-projects/cyf-ecommerce-api/public/script.js create mode 100644 3-projects/cyf-ecommerce-api/public/style.css create mode 100644 3-projects/cyf-ecommerce-api/readme.md create mode 100644 3-projects/cyf-ecommerce-api/server.js diff --git a/2-exercises/entity-relation-diagram.png b/2-exercises/entity-relation-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..b58a4ca2095d3de4485ce2e0b0e34ee0c15a76db GIT binary patch literal 31845 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 100; +``` + +``` + product_id | product_name | unit_price | supplier_id +------------+----------------+------------+------------- + 1 | Mobile Phone X | 249 | 4 + 1 | Mobile Phone X | 299 | 1 +``` + 5. Retrieve the 5 most expensive products + +```sql +SELECT + p.product_name, + pa.unit_price +FROM products p +INNER JOIN product_availability pa +ON (p.id = pa.prod_id) +ORDER BY pa.unit_price DESC +LIMIT 5; +``` + +``` + product_name | unit_price +-----------------+------------ + Mobile Phone X | 299 + Mobile Phone X | 249 + Javascript Book | 41 + Javascript Book | 40 + Javascript Book | 39 +``` + 6. Retrieve all the products with their corresponding suppliers. The result should only contain the columns `product_name`, `unit_price` and `supplier_name` + +```sql +SELECT + p.product_name, + pa.unit_price, + s.supplier_name +FROM products p +INNER JOIN product_availability pa +ON (p.id = pa.prod_id) +INNER JOIN suppliers s +ON (pa.supp_id = s.id) +ORDER BY pa.unit_price; +``` + +``` + product_name | unit_price | supplier_name +-------------------------+------------+--------------- + Coffee Cup | 3 | Amazon + Coffee Cup | 4 | Taobao + Coffee Cup | 4 | Argos + Coffee Cup | 5 | Sainsburys + Super warm socks | 5 | Taobao + Super warm socks | 8 | Argos + Super warm socks | 10 | Sainsburys + Le Petit Prince | 10 | Amazon + Le Petit Prince | 10 | Sainsburys + Super warm socks | 10 | Amazon + Ball | 14 | Amazon + Ball | 15 | Sainsburys + Tee Shirt Olympic Games | 18 | Taobao + Tee Shirt Olympic Games | 20 | Amazon + Ball | 20 | Taobao + Tee Shirt Olympic Games | 21 | Argos + Javascript Book | 39 | Argos + Javascript Book | 40 | Amazon + Javascript Book | 41 | Taobao + Mobile Phone X | 249 | Sainsburys + Mobile Phone X | 299 | Amazon +``` + 7. Retrieve all the products sold by suppliers based in the United Kingdom. The result should only contain the columns `product_name` and `supplier_name`. -8. Retrieve all orders, including order items, from customer ID `1`. Include order id, reference, date and total cost (calculated as quantity * unit price). + +```sql +SELECT + p.product_name, + s.supplier_name +FROM products p +INNER JOIN product_availability pa +ON (p.id = pa.prod_id) +INNER JOIN suppliers s +ON (pa.supp_id = s.id) +WHERE s.country = 'United Kingdom' +ORDER BY p.product_name; +``` + +``` + product_name | supplier_name +-------------------------+--------------- + Ball | Sainsburys + Coffee Cup | Sainsburys + Coffee Cup | Argos + Javascript Book | Argos + Le Petit Prince | Sainsburys + Mobile Phone X | Sainsburys + Super warm socks | Sainsburys + Super warm socks | Argos + Tee Shirt Olympic Games | Argos +``` + +8. Retrieve all orders, including order items, from customer ID `1`. Include order id, reference, date and total cost (calculated as quantity \* unit price). + +^These instructions are not clear, I have provided two variations: + +```sql +SELECT + c.id AS customer_id, + o.id AS order_id, + o.order_reference, + o.order_date, + pa.unit_price * oi.quantity AS total_cost +FROM customers c +INNER JOIN orders o +ON (c.id = o.customer_id) +INNER JOIN order_items oi +ON (o.id = oi.order_id) +INNER JOIN product_availability pa +ON (oi.product_id = pa.prod_id) +AND (oi.supplier_id = pa.supp_id) +INNER JOIN products p +ON (pa.prod_id = p.id) +WHERE c.id = 1; +``` + +``` + customer_id | order_id | order_reference | order_date | total_cost +-------------+----------+-----------------+------------+------------ + 1 | 1 | ORD001 | 2019-06-01 | 18 + 1 | 1 | ORD001 | 2019-06-01 | 25 + 1 | 2 | ORD002 | 2019-07-15 | 32 + 1 | 2 | ORD002 | 2019-07-15 | 10 + 1 | 3 | ORD003 | 2019-07-11 | 40 + 1 | 3 | ORD003 | 2019-07-11 | 40 +``` + +```sql +SELECT + c.id AS customer_id + o.id AS order_id, + o.order_reference, + o.order_date, + SUM(pa.unit_price * oi.quantity) AS total_cost +FROM customers c +INNER JOIN orders o +ON (c.id = o.customer_id) +INNER JOIN order_items oi +ON (o.id = oi.order_id) +INNER JOIN product_availability pa +ON (oi.product_id = pa.prod_id) +AND (oi.supplier_id = pa.supp_id) +INNER JOIN products p +ON (pa.prod_id = p.id) +WHERE c.id = 1 +GROUP BY c.id, o.id; +``` + +``` + customer_id | order_id | order_reference | order_date | total_cost +-------------+----------+-----------------+------------+------------ + 1 | 1 | ORD001 | 2019-06-01 | 43 + 1 | 2 | ORD002 | 2019-07-15 | 42 + 1 | 3 | ORD003 | 2019-07-11 | 80 +``` + 9. Retrieve all orders, including order items, from customer named `Hope Crosby` + +```sql +SELECT + c.name AS customer_name, + o.id AS order_id, + o.order_reference, + o.order_date, + p.id AS product_id, + p.product_name, + pa.unit_price AS product_price, + oi.quantity, + s.supplier_name, + s.country AS supplier_country +FROM customers c +INNER JOIN orders o +ON (c.id = o.customer_id) +INNER JOIN order_items oi +ON (o.id = oi.order_id) +INNER JOIN product_availability pa +ON (oi.product_id = pa.prod_id) +AND (oi.supplier_id = pa.supp_id) +INNER JOIN products p +ON (pa.prod_id = p.id) +INNER JOIN suppliers s +ON (pa.supp_id = s.id) +WHERE name = 'Hope Crosby'; +``` + +``` + customer_name | order_id | order_reference | order_date | product_id | product_name | product_price | quantity | supplier_name | supplier_country +---------------+----------+-----------------+------------+------------+----------------+---------------+----------+---------------+------------------ + Hope Crosby | 4 | ORD004 | 2019-05-24 | 1 | Mobile Phone X | 299 | 1 | Amazon | United States +``` + 10. Retrieve all the products in the order `ORD006`. The result should only contain the columns `product_name`, `unit_price` and `quantity`. + +I deliberately added the order_reference column for visual clarity. + +```sql +SELECT + o.order_reference, + p.product_name, + pa.unit_price, + oi.quantity +FROM customers c +INNER JOIN orders o +ON (c.id = o.customer_id) +INNER JOIN order_items oi +ON (o.id = oi.order_id) +INNER JOIN product_availability pa +ON (oi.product_id = pa.prod_id) +AND (oi.supplier_id = pa.supp_id) +INNER JOIN products p +ON (pa.prod_id = p.id) +INNER JOIN suppliers s +ON (pa.supp_id = s.id) +WHERE order_reference = 'ORD006'; +``` + +``` + order_reference | product_name | unit_price | quantity +-----------------+------------------+------------+---------- + ORD006 | Super warm socks | 10 | 3 + ORD006 | Le Petit Prince | 10 | 1 + ORD006 | Javascript Book | 41 | 1 + ORD006 | Coffee Cup | 4 | 3 +``` + 11. Retrieve all the products with their supplier for all orders of all customers. The result should only contain the columns `name` (from customer), `order_reference`, `order_date`, `product_name`, `supplier_name` and `quantity`. + +```sql +SELECT + c.name, + o.order_reference, + o.order_date, + p.product_name, + s.supplier_name, + oi.quantity +FROM customers c +INNER JOIN orders o +ON (c.id = o.customer_id) +INNER JOIN order_items oi +ON (o.id = oi.order_id) +INNER JOIN product_availability pa +ON (oi.product_id = pa.prod_id) +AND (oi.supplier_id = pa.supp_id) +INNER JOIN products p +ON (pa.prod_id = p.id) +INNER JOIN suppliers s +ON (pa.supp_id = s.id); +``` + +``` + name | order_reference | order_date | product_name | supplier_name | quantity +--------------------+-----------------+------------+-------------------------+---------------+---------- + Guy Crawford | ORD001 | 2019-06-01 | Tee Shirt Olympic Games | Taobao | 1 + Guy Crawford | ORD001 | 2019-06-01 | Super warm socks | Taobao | 5 + Guy Crawford | ORD002 | 2019-07-15 | Super warm socks | Argos | 4 + Guy Crawford | ORD002 | 2019-07-15 | Le Petit Prince | Sainsburys | 1 + Guy Crawford | ORD003 | 2019-07-11 | Coffee Cup | Argos | 10 + Guy Crawford | ORD003 | 2019-07-11 | Ball | Taobao | 2 + Hope Crosby | ORD004 | 2019-05-24 | Mobile Phone X | Amazon | 1 + Britanney Kirkland | ORD005 | 2019-05-30 | Javascript Book | Argos | 2 + Britanney Kirkland | ORD005 | 2019-05-30 | Le Petit Prince | Amazon | 1 + Amber Tran | ORD006 | 2019-07-05 | Coffee Cup | Taobao | 3 + Amber Tran | ORD006 | 2019-07-05 | Javascript Book | Taobao | 1 + Amber Tran | ORD006 | 2019-07-05 | Le Petit Prince | Sainsburys | 1 + Amber Tran | ORD006 | 2019-07-05 | Super warm socks | Sainsburys | 3 + Amber Tran | ORD007 | 2019-04-05 | Super warm socks | Argos | 15 + Edan Higgins | ORD008 | 2019-07-23 | Tee Shirt Olympic Games | Amazon | 1 + Edan Higgins | ORD008 | 2019-07-23 | Mobile Phone X | Sainsburys | 1 + Edan Higgins | ORD009 | 2019-07-24 | Ball | Sainsburys | 2 + Edan Higgins | ORD010 | 2019-05-10 | Ball | Taobao | 1 + Edan Higgins | ORD010 | 2019-05-10 | Super warm socks | Amazon | 5 +``` + 12. Retrieve the names of all customers who bought a product from a supplier based in China. -13. List all orders giving customer name, order reference, order date and order total amount (quantity * unit price) in descending order of total. +```sql +SELECT + c.name AS customer_name, + s.country AS supplier_country +FROM customers c +INNER JOIN orders o +ON (c.id = o.customer_id) +INNER JOIN order_items oi +ON (o.id = oi.order_id) +INNER JOIN product_availability pa +ON (oi.product_id = pa.prod_id) +AND (oi.supplier_id = pa.supp_id) +INNER JOIN suppliers s +ON (pa.supp_id = s.id) +WHERE s.country = 'China' +GROUP BY c.name, s.country; +``` + +``` + customer_name | supplier_country +---------------+------------------ + Amber Tran | China + Edan Higgins | China + Guy Crawford | China +``` + +13. List all orders giving customer name, order reference, order date and order total amount (quantity \* unit price) in descending order of total. + +```sql +SELECT + c.name AS customer_name, + o.order_reference, + o.order_date, + SUM(pa.unit_price * oi.quantity) AS order_total_amount +FROM customers c +INNER JOIN orders o +ON (c.id = o.customer_id) +INNER JOIN order_items oi +ON (o.id = oi.order_id) +INNER JOIN product_availability pa +ON (oi.product_id = pa.prod_id) +AND (oi.supplier_id = pa.supp_id) +INNER JOIN products p +ON (pa.prod_id = p.id) +GROUP BY o.id, c.name +ORDER BY order_total_amount DESC; +``` + +``` + customer_name | order_reference | order_date | order_total_amount +--------------------+-----------------+------------+-------------------- + Hope Crosby | ORD004 | 2019-05-24 | 299 + Edan Higgins | ORD008 | 2019-07-23 | 269 + Amber Tran | ORD007 | 2019-04-05 | 120 + Amber Tran | ORD006 | 2019-07-05 | 93 + Britanney Kirkland | ORD005 | 2019-05-30 | 88 + Guy Crawford | ORD003 | 2019-07-11 | 80 + Edan Higgins | ORD010 | 2019-05-10 | 70 + Guy Crawford | ORD001 | 2019-06-01 | 43 + Guy Crawford | ORD002 | 2019-07-15 | 42 + Edan Higgins | ORD009 | 2019-07-24 | 30 +``` diff --git a/3-projects/cyf-ecommerce-api/.gitignore b/3-projects/cyf-ecommerce-api/.gitignore new file mode 100644 index 00000000..25c8fdba --- /dev/null +++ b/3-projects/cyf-ecommerce-api/.gitignore @@ -0,0 +1,2 @@ +node_modules +package-lock.json \ No newline at end of file diff --git a/3-projects/cyf-ecommerce-api/package.json b/3-projects/cyf-ecommerce-api/package.json new file mode 100644 index 00000000..804a5780 --- /dev/null +++ b/3-projects/cyf-ecommerce-api/package.json @@ -0,0 +1,20 @@ +{ + "name": "cyf-ecommerce-api", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "node server.js", + "dev": "nodemon server.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "express": "^4.18.2", + "pg": "^8.10.0" + }, + "devDependencies": { + "nodemon": "^2.0.22" + } +} diff --git a/3-projects/cyf-ecommerce-api/project-screenshot.png b/3-projects/cyf-ecommerce-api/project-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..bf695137075c7f9ae86ccf913c4f215dfdbb77d2 GIT binary patch literal 37898 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 gNtnPZu-d&r&I;c9>kU+8}PAK2We;{X5v literal 0 HcmV?d00001 diff --git a/3-projects/cyf-ecommerce-api/public/index.html b/3-projects/cyf-ecommerce-api/public/index.html new file mode 100644 index 00000000..725833cf --- /dev/null +++ b/3-projects/cyf-ecommerce-api/public/index.html @@ -0,0 +1,25 @@ + + + + + + + PostgreSQL API - Ecommerce + + +
+ +

PostgreSQL API - Ecommerce

+
+
+

Links to API Routes :

+ +
+
+

Buttons to Formatted Output :

+ +
+
+ + + diff --git a/3-projects/cyf-ecommerce-api/public/script.js b/3-projects/cyf-ecommerce-api/public/script.js new file mode 100644 index 00000000..7893e078 --- /dev/null +++ b/3-projects/cyf-ecommerce-api/public/script.js @@ -0,0 +1,33 @@ +const paths = ["customers", "suppliers", "products"]; + +paths.forEach((path) => { + const navLinks = document.getElementById("nav-links"); + const link = document.createElement("a"); + link.href = `/${path}`; + link.innerText = `/${path}`; + navLinks.appendChild(link); + + const navButtons = document.getElementById("nav-buttons"); + const button = document.createElement("button"); + button.id = `${path}`; + button.innerText = `/${path}`; + button.addEventListener("click", (event) => fetchAndFormat(event.target.id)); + navButtons.appendChild(button); +}); + +async function fetchAndFormat(path) { + try { + const response = await fetch(`/${path}`); + const data = await response.json(); + const outputContainer = document.getElementById("output-container"); + outputContainer.innerText = ""; + const pre = document.createElement("pre"); + const code = document.createElement("code"); + code.id = "output-json"; + code.innerText = JSON.stringify(data, null, 2); + pre.appendChild(code); + outputContainer.appendChild(pre); + } catch (error) { + console.log(error); + } +} diff --git a/3-projects/cyf-ecommerce-api/public/style.css b/3-projects/cyf-ecommerce-api/public/style.css new file mode 100644 index 00000000..d25a897f --- /dev/null +++ b/3-projects/cyf-ecommerce-api/public/style.css @@ -0,0 +1,70 @@ +* { + box-sizing: border-box; + font-family: system-ui, sans-serif; + color: black; + font-size: 16px; + font-weight: 400; +} + +body { + display: grid; + background-color: hsl(0, 0%, 92%); + max-width: 500px; + margin: 0 auto; + row-gap: 10px; +} + +header { + display: flex; + align-items: center; + gap: 20px; + border-bottom: 1px solid hsl(207, 47%, 39%); + padding: 5px; +} + +header > img { + max-width: 40px; + max-height: 40px; +} + +header > h1 { + margin: 0; + font-size: 24px; + font-weight: 600; +} + +h2 { + margin: 0; + font-size: 18px; + font-weight: 600; +} + +nav { + display: flex; + flex-wrap: wrap; + gap: 10px; + padding: 5px; +} + +button { + background-color: hsl(207, 47%, 39%); + color: hsl(0, 0%, 90%); + border: none; + border-radius: 2px; + padding: 5px 8px; + cursor: pointer; +} + +button:hover { + background-color: hsl(207, 47%, 49%); +} + +#output-container { + background-color: hsl(0, 0%, 95%); + border: 1px solid darkgray; + padding: 0 10px; +} + +#output-json { + font-family: monospace; +} diff --git a/3-projects/cyf-ecommerce-api/readme.md b/3-projects/cyf-ecommerce-api/readme.md new file mode 100644 index 00000000..8cf41f19 --- /dev/null +++ b/3-projects/cyf-ecommerce-api/readme.md @@ -0,0 +1,28 @@ +# PostgreSQL Ecommerce API + +## Screenshot: + +![](project-screenshot.png) + +## Instructions: + +1. clone this repo +2. install [postgresql](https://www.postgresql.org/) +3. inside the root of the repository, open a terminal: +4. move into the `2-exercises` folder: + `cd 2-exercises` +5. create the database + `createdb cyf_ecommerce` +6. populate the database + `createdb -d cyf_ecommerce -f cyf-cyf_ecommerce.sql` +7. move to the api directory: + `cd ../3-projects/cyf-ecommerce-api` +8. install the project dependencies: + `npm install` +9. start the server in develoment mode: + `npm run dev` +10. visit http://localhost:3000 + +**Note: this project assumes you are connecting to the database with:** +`username: postgres` +`password: password` diff --git a/3-projects/cyf-ecommerce-api/server.js b/3-projects/cyf-ecommerce-api/server.js new file mode 100644 index 00000000..92791709 --- /dev/null +++ b/3-projects/cyf-ecommerce-api/server.js @@ -0,0 +1,63 @@ +const express = require("express"); +const app = express(); + +app.use(express.static("public")); + +const { Pool } = require("pg"); + +const db = new Pool({ + user: "postgres", + host: "localhost", + database: "cyf_ecommerce", + password: "password", + port: 5432, +}); + +app.get("/customers", (req, res) => { + db.query("SELECT * FROM customers") + .then((result) => { + res.json(result.rows); + }) + .catch((error) => { + console.log(error); + }); +}); + +app.get("/suppliers", (req, res) => { + db.query("SELECT * FROM suppliers") + .then((result) => { + res.json(result.rows); + }) + .catch((error) => { + console.log(error); + }); +}); + +app.get("/products", (req, res) => { + db.query( + `SELECT + p.product_name, + pa.unit_price, + s.supplier_name + FROM product_availability pa + INNER JOIN products p + ON (pa.prod_id = p.id) + INNER JOIN suppliers s + ON (pa.supp_id = s.id) + ORDER BY p.product_name, pa.unit_price;` + ) + .then((result) => { + res.json(result.rows); + }) + .catch((error) => { + console.log(error); + }); +}); + +app.get("/", (req, res) => { + res.sendFile(__dirname + "./public/index.html"); +}); + +app.listen(3000, () => { + console.log("The server is running on port 3000"); +});