Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions week-1/mandatory/2-classes-db/task.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,58 @@ Below you will find a set of tasks for you to complete to consolidate and extend
To submit this homework write the correct commands for each question here:

```sql
1. SELECT * from room_types WHERE def_rate > 100;

2. SELECT * from reservations WHERE checkin_date BETWEEN '2020-09-01' AND'2020-09-30' AND (checkout_date - checkin_date ) > 3;

3. SELECT * from customers WHERE city LIKE 'M%';

4. INSERT into room_types (room_type,def_rate) VALUES ('PENTHOUSE',185.00);

5. INSERT into rooms (room_no, rate, room_type) VALUES
(501,185.00,'PENTHOUSE'),
(502,185.00,'PENTHOUSE');

6. INSERT into rooms (room_no, rate, room_type) VALUES
(503,143.00,'PREMIER PLUS');

7. SELECT count(id) from reservations
WHERE checkin_date >= '2020-08-01'
AND checkout_date <= '2020-08-31';

8. SELECT SUM(checkout_date - checkin_date) from
reservations WHERE room_no between 201 AND 299;

9. SELECT COUNT(*) from invoices
WHERE total > 300.00;

*Grand Total*
SELECT SUM(total) from invoices
WHERE total > 300.00;

*Average*
SELECT AVG(total) from invoices
WHERE total > 300.00;

10. SELECT SUM(checkout_date - checkin_date) from reservations
WHERE room_no between 101 AND 112;
(54)

SELECT SUM(checkout_date - checkin_date) from reservations
WHERE room_no between 201 AND 212;
(63)

SELECT SUM(checkout_date - checkin_date) from reservations
WHERE room_no between 301 AND 312;
(46)

SELECT SUM(checkout_date - checkin_date) from reservations
WHERE room_no between 401 AND 412;
(40)

SELECT SUM(checkout_date - checkin_date) from reservations
WHERE room_no between 501 AND 512;
(none)


```
Expand Down
30 changes: 30 additions & 0 deletions week-2/mandatory/2-ecommerce-db/task.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,36 @@ Below you will find a set of tasks for you to complete to set up a database for

To submit this homework write the correct commands for each question here:
```sql
1. select name, address from customers where country ='United States';

2. select name from customers order by name asc;

3.select * from products where product_name like '%socks%';

4. select p.product_name, pa.* from products p join product_availability pa on (p.id = pa.prod_id) where pa.unit_price > 100;

5. select p.product_name, pa.unit_price from products p join product_availability pa on (p.id = pa.prod_id) order by pa.unit_price limit 5;

6. select p.product_name, pa.unit_price, s.suuplier_name from products p join product_availability pa on (p.id = pa.prod_id) join suppliers s on (pa.supp_id = s.id);

7.select p.product_name , s.supplier_name from products p join product_availability pa on (p.id = pa.prod_id) join suppliers s on (pa.supp_id = s.id) where s.country ='United Kingdom';

8. select o.id, o.order_reference, o.order_date, (oi.quantity * pa.unit_price) as total_cost from orders o join order_items oi on (o.id =oi.order_id) join product_availability pa on (oi.product_id = pa.prod_id) where o.customer_id = 1;

9. select * from order_items oi join orders o on (oi.order_id = o.id) join customers c on (o.custmer_id = c.id) where c.name ='Hope Crosby';

10. select p.product_name, pa.unit_price, oi.quantity from products p join product_availability pa on (p.id = pa.prod_id) join order_items oi on (pa.prod_id = oi.product_id) join orders o on (oi.order_id = o.id) where o.order_reference = 'ORD006';

11. select c.name, p.product_name, o.order_reference, o.order_date, s.supplier_name, oi.quantity from customers c join orders o on (c.id = o.customers_id) join order_items oi on (o.id = oi.order_id) join suppliers s on (oi.supplier_id = s.id) join product_availability pa on (s.id = pa.supp.id) join products p on (pa.prod_id = p.id);

12. select distinct c.name from customers c join orders o on (c.id = o.customer_id) join order_items oi on (o.id = oi.order_id) join suppliers s on (oi.supplier_id = s.id) where s.country ='China';

13. select c.name, o.order_reference, o.order_date, (oi.quantity * pa.unit_price) as total_cost from customers c join orders o on (c.id = o.customer_id) join order_items oi on (o.id = oi.order_id) join product_availalbility pa on (oi.product_id = pa.prod_id) order by total_cost desc;







```
Expand Down
43 changes: 43 additions & 0 deletions week-2/mandatory/3-api/server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
const express = require("express");
const app = express();

app.listen(3000, function(){
console.log("Server is listening on port 3000. Ready to accept requests! ")
});

const {Pool} = require ('pg');

const db = new Pool({
user: 'farhana',
host:'localhost',
database: 'cyf_ecommerce',
pasword: '',
port: 5432
});

//get all customers

app.get("/customers", function(req, res){
db.query('SELECT id, name, address,city, country FROM customers',
(error, result) => {
res.json(result.rows);
});
});

//get all suppliers

app.get("/suppliers", function(re,res){
db.query('SELECT id, supplier_name, country FROM suppliers',
(error, result) => {
res.json(result.rows);
});
});

// get product names, their prices and suppliers
app.get("/products", function(req, res){
db.query('SELECT p.product_name, pa.unit_price, s.supplier_name FROM products p JOIN product_availability pa ON (p.id = pa.prod_id) JOIN suppliers s ON(pa.supp_id = s.id)',
(error, result) => {
res.json(result.rows);
});
});

243 changes: 243 additions & 0 deletions week-3/mandatory/2-api/server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,243 @@
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
// app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());



app.listen(3000, function(){
console.log("Server is listening on port 3000. Ready to accept requests!");
} );

const {Pool} = require ('pg');

const db = new Pool({
user: 'farhana',
host:'localhost',
database: 'cyf_ecommerce',
pasword: '',
port: 5432
});

// // get product names, their prices and suppliers + query paramaters
app.get("/products", function(req, res){
let name = req.query.name;

if(name === undefined){
db.query('SELECT p.product_name, pa.unit_price, s.supplier_name FROM products p JOIN product_availability pa ON (p.id = pa.prod_id) JOIN suppliers s ON(pa.supp_id = s.id)',
(error, result) => {
if(error === undefined){
res.json(result.rows);
} else{
res.status(400).send("Bad request "+ error);
}

});
} else{
let newName = name.toLowerCase();
db.query("SELECT * FROM products WHERE Lower(product_name) LIKE '%'||$1||'%'",[newName], (error, result)=>{
if(error === undefined){
res.json(result.rows);
} else{
res.status(400).send("Bad request " + error);
}

});
}

});

//get customer by ID
app.get("/customers/:customerid", function(req,res){
const customerId = parseInt(req.params.customerid);
if(customerId !== undefined){
db.query("SELECT * from customers WHERE id =$1",[customerId], (error, result) =>{
if(error === undefined){
res.json(result.rows);
} else{
res.status(400).send("Bad Request " + error );
}

});


} else{
res.send("Customer doesnt exist");

}

});

//get all customers

app.get("/customers", function(req, res){
db.query('SELECT id, name, address,city, country FROM customers',
(error, result) => {
if(error === undefined){
res.json(result.rows);
} else{
res.status(400).send("Bad Request "+ error);
}

});
});

//POST new customer

app.post("/customers", function(req,res){
const newName = req.body.name;
const newAddress = req.body.address;
const newCity = req.body.city
const newCountry = req.body.country;

db.query("INSERT INTO customers (name,address,city,country) VALUES ($1,$2,$3,$4) returning id",
[newName,newAddress,newCity,newCountry], (error, result)=>{
if(error == undefined){
res.send("New Customer Added" + result.rows[0].id);
}else {
res.status(400).send("Bad request" + error);
console.log(error);
}


});
});


//add new product

app.post("/products", function(req,res){
const newName = req.body.name;

db.query("INSERT INTO products (product_name) VALUES ($1) returning id",
[newName], (error, result)=>{
if(error == undefined){
res.send("New Product Added" + result.rows[0].id);
}else {
res.status(400).send("Bad request" + error);
console.log(error);
}

});
});


//Post product availability
app.post("/availability", function(req,res){
const newProdId = req.body.prodId;
const newSuppId = req.body.suppId;
const newUnitPrice = req.body.unitPrice;


if(newUnitPrice > 0){
db.query("SELECT 1 FROM products WHERE id = $1",[newProdId], (error, result)=>{
if(result.rowCount < 0){
res.status(400).send("Product doesn't exist");

} else{

db.query("INSERT INTO product_availability (prod_id, unit_price) VALUES ($2,$3)",[newProdId, newUnitPrice], (error)=>{
db.query("SELECT 1 FROM suppliers WHERE id = $4",[newSuppId], (error,result)=>{
if(result.rowCount < 0){
res.status(400).send("Supplier doesn't exist");
}else{
db.query("INSERT INTO product_availability (supp_id) VALUES ($5)",[newSuppId], (error)=>{
res.send("Product info added");
})
}
})
});
}
});
}else{
res.send("Enter a positive value");
}
});

//customers/:customerId/orders
app.post("/customers/:id/orders", function(req,res){
const customerId = req.params.id;
const orderDate = req.body.orderDate;
const orderReference = req.body.orderReference;

db.query("SELECT 1 FROM customers WHERE id = $1",[customerId], (error, result)=>{
if(error == undefined){
if(result.rowCount < 0){
res.send("Customer doesn't exist");
} else{
db.query("INSERT INTO orders (order_date, order_reference, customer_id)"+
"VALUES ($2,$3,$1)",[orderDate, orderReference, customerId],(error)=>{
if(error === undefined){
res.send("New order added");
}else{
res.status(400).send("Bad request" + error);
console.log(error);
}

});
}
}else{
res.status(400).send("Bad request" + error);
console.log(error);
}
})

})

app.put("/customers/:id", function (req, res){
const customerId = req.params.id;
const newName = req.body.name;
const newAddress = req.body.address;
const newCity = req.body.city;
const newCountry = req.body.country;

db.query("UPDATE customers SET name=$2, address = $3, city = $4, country = $5 WHERE id=$1",
[customerId, newName, newAddress, newCity, newCountry], (error)=>{
if(error == undefined){
res.send(`Customer ${customerId} updated!`);
} else{
console.log(error);
res.status(500).send("Bad Request");

}
});

});

app.delete("/orders/:orderId", function(req,res){
const orderId = req.params.orderId;

db.query("DELETE FROM orders WHERE id = $1",[orderId], (error)=>{
if(error==undefined){
res.send(`Order ${orderId} is deleted!`);
}else{
res.status(400).send("Bad Request " + error);
}
});
});

//delete an existing customer only if this customer doesn't have orders.
app.delete("/customers/:id", function(req,res){
const customerId = req.params.id;
db.query("SELECT 1 from orders WHERE customer_id = $1",[customerId], (error, result)=>{
if(error == undefined){
if(result.rowCount === 0){
db.query("DELETE from customers WHERE id = $1",[customerId], (error)=>{
if(error == undefined){
res.send(`Customer ${customerId} deleted`)
}else{
res.status(400).send("Bad request " + error);
console.log(error)
}
})
}else{
res.send(`Customer ${customerId} has order pending`);
}
}else{
res.status(400).send("Bad Request " + error);
console.log(error);
}
});
});

Loading