Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nodejs-week3/hossein #233

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Binary file added databases/week2/Screenshot 2025-02-15 020231.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
61 changes: 61 additions & 0 deletions databases/week2/school.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
CREATE DATABASE IF NOT EXISTS School;
USE School;

CREATE TABLE student (
student_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
family VARCHAR(50),
phone VARCHAR(50),
adress VARCHAR(255),
email VARCHAR(255),
date_registered DATETIME
);

CREATE TABLE enrolments (
student_id INT,
course_id INT,
date DATETIME NOT NULL,
price DECIMAL(5,2),
PRIMARY KEY (student_id, course_id),
FOREIGN KEY (student_id)
REFERENCES student(student_id)
ON UPDATE CASCADE
ON DELETE NO ACTION,
FOREIGN KEY (course_id)
REFERENCES courses(course_id)
ON UPDATE CASCADE
ON DELETE CASCADE
);

CREATE TABLE courses (
course_id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
price DECIMAL(5,2) NOT NULL,
instructors_id INT,
FOREIGN KEY (instructors_id)
REFERENCES instructors(instructors_id)
ON UPDATE CASCADE
ON DELETE NO ACTION
);

CREATE TABLE course_tags (
course_id INT,
tag_id INT,
PRIMARY KEY (course_id, tag_id),
FOREIGN KEY (course_id)
REFERENCES courses(course_id)
ON DELETE CASCADE,
FOREIGN KEY (tag_id)
REFERENCES tags(tag_id)
ON DELETE CASCADE
);

CREATE TABLE tags (
tag_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL
);

CREATE TABLE instructors (
instructors_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL
);
97 changes: 97 additions & 0 deletions databases/week2/week2.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
-- Active: 1738674433543@@127.0.0.1@3306@my_database_week1
-- part 1
SELECT * from status
SELECT * FROM task;

INSERT into task(title, description, created, updated, due_date, status_id, user_id)
VALUES('Database week2','Do homework for database week 2', '2025-02-09 12:00:00', '2025-02-13 17:10:15','2025-02-12 18:00:00',3,1);

UPDATE task
SET title = "HUF homework"
WHERE title= "Database week2";


UPDATE task
set due_date= "2025-02-12 18:20:15"
WHERE title= "HUF homework";

UPDATE task
set status_id= 2
WHERE id= 16;

UPDATE task
set status_id= 3
where id=16;


DELETE from task
WHERE id=16;

-- part 2

CREATE DATABASE sql_School;
USE sql_School;
CREATE Table Classes;
(
class_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) not NULL,
begins DATE NOT null,
ends DATE NOT null
);
CREATE Table students(
student_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
phone VARCHAR(50) NOT NULL,
class_id int,
Foreign Key fk_students_classes(class_id)
REFERENCES classes(class_id)
ON UPDATE CASCADE
ON DELETE NO ACTION
);

CREATE INDEX inx_name on students(name);



ALTER Table classes
ADD status ENUM ('not-started', 'ongoing', 'finished');

--part 3
use hyf_lesson2;

select *
from `user` U
JOIN user_task ut
on u.id= ut.user_id
JOIN task t
ON t.id=ut.task_id
where u.email like "%@spotify.com";


select t.id, t.title, t.description, t.created, t.updated, t.due_date, s.name
from user u
join user_task ut
on u.id=ut.user_id
join task t
on t.id= ut.task_id
join status s on t.status_id=s.id
where u.name='Donald Duck' and s.name='Not started';

select *
from user u
JOIN user_task ut
on u.id=ut.user_id
join task t
on t.id=ut.task_id and u.name= 'Maryrose Meadows'
where (month(created)=9);


SELECT MONTH(t.created) AS month, COUNT(*) AS task_count
FROM task t
GROUP BY MONTH(t.created)
ORDER BY month;




Binary file added databases/week3/Screenshot 2025-02-19 162640.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
148 changes: 148 additions & 0 deletions databases/week3/reserve_meal.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
CREATE DATABASE meal_reserve_share;

USE meal_reserve_share;

CREATE TABLE Meal (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
description TEXT,
location VARCHAR(255) NOT NULL,
meal_time DATETIME,
max_reservation INT NOT NULL,
price DECIMAL(5,2),
create_date DATE
);


CREATE TABLE Reservation(
id INT PRIMARY KEY AUTO_INCREMENT,
number_of_guests INT NOT null,
meal_id INT NOT NULL,
Foreign Key (meal_id) REFERENCES Meal (id)
ON UPDATE CASCADE
ON DELETE CASCADE,
create_date DATE NOT null ,
contact_phonenumber VARCHAR(50) NOT NULL,
contact_name VARCHAR(50) NOT NULL,
contact_email VARCHAR(255) NOT NULL
);

CREATE TABLE Review (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(50) NOT NULL,
desciption TEXT,
meal_id INT,
Foreign Key (meal_id) REFERENCES Meal (id)
ON UPDATE CASCADE
ON DELETE CASCADE,
stars int,
create_date DATE NOT NULL
)



SELECT * from meal;

INSERT INTO meal(title,description,location,meal_time,max_reservation,price,create_date)
VALUES('Lasagna',' is a type of pasta','italian','2025-02-22 08:20:00',30,70,'2025-02-22');


SELECT *
from meal
WHERE id=1;

UPDATE meal
SET title= "kobideh kabab", price=80, max_reservation=60
where id=1;

DELETE from meal
where id =1;

select * from reservation;


insert into reservation(number_of_guests, meal_id, create_date, contact_phonenumber, contact_name, contact_email)
values(2,4,"2025-02-20","52845214","hossein","[email protected]");

select *
from reservation
WHERE id=1

UPDATE reservation
set number_of_guests=5, create_date="2025-02-17"
WHERE id =1;

DELETE from reservation
WHERE id =1;


select * from review;

insert into review(title, desciption, meal_id, stars, create_date)
values("good deal "," A truly delightful and satisfying meal",4,3,"2025-02-17");

select *
from review
WHERE id=1;

UPDATE review
SET title="flavor", stars=5
WHERE id=1;

DELETE from review
WHERE id=1;

select * from meal
where price<90;


select *
from meal m
join reservation r
where m.id= r.meal_id and r.number_of_guests<m.max_reservation



SELECT
m.title,
m.max_reservation - COALESCE(SUM(r.number_of_guests), 0) aS number_orders_available,
m.price
FROM meal m
LEFT JOIN reservation r ON m.id = r.meal_id
GROUP BY m.id, m.title, m.max_reservation, m.price
HAVING COALESCE(SUM(r.number_of_guests), 0) < m.max_reservation;


select *
from meal
where title LIKE "%Rød grød med fløde%";

SELECT *
from meal
WHERE create_date BETWEEN "2025-02-18"and "2025-02-20";


SELECT *
from meal
LIMIT 5;

SELECT m.title, m.price,r.stars
FROM meal m
JOIN review r
on m.id= r.meal_id
where r.stars=(SELECT MAX(stars)
FROM review
WHERE meal_id = m.id);


select *
from reservation
where id=2
ORDER by create_date;

SELECT m.title,m.price, AVG(r.stars) as avrage_stars
from meal m
JOIN review r
on m.id=r.meal_id
GROUP BY m.id
ORDER BY avrage_stars ;
9 changes: 9 additions & 0 deletions nodejs/week1/avg.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
const myNumbers = process.argv.slice(2);
let sum = 0;

for (let i = 0; i < myNumbers.length; i++) {
sum += Number(myNumbers[i]);
}

let average = sum / myNumbers.length || 0;
console.log(`Average: ${average}`);
Binary file added nodejs/week2/.gitignore
Binary file not shown.
70 changes: 70 additions & 0 deletions nodejs/week2/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import express from "express";
import fs from "fs";

const app = express();
const port = process.env.PORT || 3000;
app.use(express.json());

const documents = JSON.parse(fs.readFileSync("documents.json", "utf8"));

app.get("/", (req, res) => {
res.send(`This is a search engine`);
});

// GET /search
app.get("/search", (req, res) => {
const searchQuery = req.query.q;
if (!searchQuery) {
return res.send(documents);
}
const result = documents.filter((doc) =>
Object.values(doc).some((value) =>
value.toString().toLowerCase().includes(searchQuery.toLowerCase())
)
);
res.send(result);
});

// GET /documents/:id
app.get("/documents/:id", (req, res) => {
const idNumber = Number(req.params.id);
const result = documents.find((c) => c.id === idNumber);
if (!result) {
return res.status(404).send("This ID does not exist");
}
res.send(result);
});

// POST /search
app.post("/search", (req, res) => {
const { fields } = req.body;
const query = req.query.q;

if (fields && query) {
return res.status(400).send("You should not use both fields and query together");
}

let results = [];

if (query) {
results = documents.filter((doc) =>
Object.values(doc).some((value) =>
value.toString().toLowerCase().includes(query.toLowerCase())
)
);
return res.send(results);
}

if (fields) {
results = documents.filter((doc) =>
Object.entries(fields).every(([key, value]) => doc[key] === value)
);
return res.send(results);
}

res.send(documents);
});

app.listen(port, () => {
console.log(`Listening on port ${port}`);
});
Loading