From f64a26c094f78a4dc5e3cbaf85a6b278d3db4cb6 Mon Sep 17 00:00:00 2001 From: Ivan K Date: Sun, 23 Nov 2025 22:34:43 +0100 Subject: [PATCH 1/7] w2 prep --- Week2/prep/w1-prep-exe.sql | 108 ++++++++++++++++++++++++ Week2/prep/w2-prep-insert-mok-data.sql | 111 +++++++++++++++++++++++++ Week2/prep/w2-request.sql | 24 ++++++ 3 files changed, 243 insertions(+) create mode 100644 Week2/prep/w1-prep-exe.sql create mode 100644 Week2/prep/w2-prep-insert-mok-data.sql create mode 100644 Week2/prep/w2-request.sql diff --git a/Week2/prep/w1-prep-exe.sql b/Week2/prep/w1-prep-exe.sql new file mode 100644 index 000000000..d0c156004 --- /dev/null +++ b/Week2/prep/w1-prep-exe.sql @@ -0,0 +1,108 @@ +-- Очищаем существующие таблицы (для повторного запуска) -- Drop existing tables (for re-running the script) +DROP TABLE IF EXISTS recipe_methods; +DROP TABLE IF EXISTS recipe_ingredients; +DROP TABLE IF EXISTS recipe_categories; +DROP TABLE IF EXISTS recipes; +DROP TABLE IF EXISTS cooking_methods; +DROP TABLE IF EXISTS ingredients; +DROP TABLE IF EXISTS main_ingredients; +DROP TABLE IF EXISTS categories; +DROP TABLE IF EXISTS cuisines; + +--------------------------------------------------------- +-- 1. Таблица кухонь (Italian, Chinese, Japanese…) -- Table of Cuisines (Italian, Chinese, Japanese…) +--------------------------------------------------------- +CREATE TABLE cuisines ( + id SERIAL PRIMARY KEY, + name VARCHAR(100) NOT NULL UNIQUE +); + +--------------------------------------------------------- +-- 2. Таблица основных ингредиентов (мясо, рыба, овощи) -- Table of Main Ingredients (meat, fish, vegetables) +--------------------------------------------------------- +CREATE TABLE main_ingredients ( + id SERIAL PRIMARY KEY, + name VARCHAR(150) NOT NULL UNIQUE +); + +--------------------------------------------------------- +-- 3. Таблица всех возможных ингредиентов (морковь, масло, соль) -- Table of All Possible Ingredients (carrot, oil, salt) +--------------------------------------------------------- +CREATE TABLE ingredients ( + id SERIAL PRIMARY KEY, + name VARCHAR(150) NOT NULL UNIQUE +); + +--------------------------------------------------------- +-- 4. Таблица категорий (суп, салат, десерт, завтрак) -- Table of Categories (soup, salad, dessert, breakfast) +--------------------------------------------------------- +CREATE TABLE categories ( + id SERIAL PRIMARY KEY, + name VARCHAR(100) NOT NULL UNIQUE +); + +--------------------------------------------------------- +-- 5. Таблица методов приготовления (жарка, запекание, варка) -- Table of Cooking Methods (frying, baking, boiling) +--------------------------------------------------------- +CREATE TABLE cooking_methods ( + id SERIAL PRIMARY KEY, + name VARCHAR(100) NOT NULL UNIQUE +); + +--------------------------------------------------------- +-- 6. Главная таблица рецептов -- Main Recipes Table +--------------------------------------------------------- +CREATE TABLE recipes ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) NOT NULL, + cuisine_id INT, + main_ingredient_id INT, + FOREIGN KEY (cuisine_id) REFERENCES cuisines(id), + FOREIGN KEY (main_ingredient_id) REFERENCES main_ingredients(id) +); + +--------------------------------------------------------- +-- 7. Связь рецепт ↔ категории (many-to-many) -- Recipe ↔ Categories Relationship (many-to-many) +--------------------------------------------------------- +CREATE TABLE recipe_categories ( + recipe_id INT NOT NULL, + category_id INT NOT NULL, + PRIMARY KEY (recipe_id, category_id), + FOREIGN KEY (recipe_id) REFERENCES recipes(id), + FOREIGN KEY (category_id) REFERENCES categories(id) +); + +--------------------------------------------------------- +-- 8. Связь рецепт ↔ ингредиенты (many-to-many) -- Recipe ↔ Ingredients Relationship (many-to-many) +--------------------------------------------------------- +CREATE TABLE recipe_ingredients ( + recipe_id INT NOT NULL, + ingredient_id INT NOT NULL, + amount VARCHAR(50), -- например "200 г", "1 ст.л." + PRIMARY KEY (recipe_id, ingredient_id), + FOREIGN KEY (recipe_id) REFERENCES recipes(id), + FOREIGN KEY (ingredient_id) REFERENCES ingredients(id) +); + +--------------------------------------------------------- +-- 9. Связь рецепт ↔ методы приготовления (many-to-many) -- Recipe ↔ Cooking Methods Relationship (many-to-many) +--------------------------------------------------------- +CREATE TABLE recipe_methods ( + recipe_id INT NOT NULL, + method_id INT NOT NULL, + PRIMARY KEY (recipe_id, method_id), + FOREIGN KEY (recipe_id) REFERENCES recipes(id), + FOREIGN KEY (method_id) REFERENCES cooking_methods(id) +); + +--------------------------------------------------------- +-- 10. кол-во ингредиентов в рецепте -- Quantity of Ingredients in Recipe +--------------------------------------------------------- +CREATE TABLE recipe_ingredient_amounts ( + recipe_id INT NOT NULL, + ingredient_id INT NOT NULL, + amount VARCHAR(50) NOT NULL, -- например "200 г", "1 ст.л." + PRIMARY KEY (recipe_id, ingredient_id), + FOREIGN KEY (recipe_id) REFERENCES recipes(id), + FOREIGN KEY (ingredient_id) REFERENCES ingredients(id) +); \ No newline at end of file diff --git a/Week2/prep/w2-prep-insert-mok-data.sql b/Week2/prep/w2-prep-insert-mok-data.sql new file mode 100644 index 000000000..52050007a --- /dev/null +++ b/Week2/prep/w2-prep-insert-mok-data.sql @@ -0,0 +1,111 @@ + +-- I will use MOCK data so we made id manually for clarity. + +-- 1. Cuisines (только японская встречается явно) -- Cuisines (only Japanese is explicitly mentioned) +INSERT INTO cuisines (name) VALUES +('Japanese'); + +-- 2. Main ingredients (по твоим рецептам выделим примерные) -- Main ingredients (based on your recipes, approximate) +INSERT INTO main_ingredients (name) VALUES +('Cheese'), +('Vegetables'), +('Pasta'), +('Eggs'); + +-- 3. Categories +INSERT INTO categories (name) VALUES +('Cake'), +('No-Bake'), +('Vegetarian'), +('Vegan'), +('Gluten-Free'), +('Japanese'); + +-- 4. Ingredients +INSERT INTO ingredients (name) VALUES +('Cheese'), +('Vegetables'), +('Pasta'), +('Eggs'), +('Condensed milk'), +('Cream Cheese'), +('Lemon Juice'), +('Pie Crust'), +('Cherry Jam'), +('Brussels Sprouts'), +('Sesame seeds'), +('Pepper'), +('Salt'), +('Olive oil'), +('Macaroni'), +('Butter'), +('Flour'), +('Milk'), +('Shredded Cheddar cheese'), +('Eggs'), +('Soy sauce'), +('Sugar'); + +-- 5. Recipes +INSERT INTO recipes (name, cuisine_id, place_id, main_ingredient_id) VALUES +('No-Bake Cheesecake', NULL, NULL, 1), +('Roasted Brussels Sprouts', NULL, NULL, 2), +('Mac & Cheese', NULL, NULL, 3), +('Tamagoyaki Japanese Omelette', 1, NULL, 4); + +-- 6. Recipe ↔ Categories +-- No-Bake Cheesecake +INSERT INTO recipe_categories (recipe_id, category_id) VALUES +(1, 1), -- Cake +(1, 2), -- No-Bake +(1, 3); -- Vegetarian + +-- Roasted Brussels Sprouts +INSERT INTO recipe_categories (recipe_id, category_id) VALUES +(2, 4), -- Vegan +(2, 5); -- Gluten-Free + +-- Mac & Cheese +INSERT INTO recipe_categories (recipe_id, category_id) VALUES +(3, 3); -- Vegetarian + +-- Tamagoyaki Japanese Omelette +INSERT INTO recipe_categories (recipe_id, category_id) VALUES +(4, 3), -- Vegetarian +(4, 6); -- Japanese + +-- 7. Recipe ↔ Ingredients +-- No-Bake Cheesecake +INSERT INTO recipe_ingredients (recipe_id, ingredient_id, amount) VALUES +(1, 1, '200 ml'), -- Condensed milk +(1, 2, '250 g'), -- Cream Cheese +(1, 3, '1 tbsp'), -- Lemon Juice +(1, 4, '1 crust'), -- Pie Crust +(1, 5, '2 tbsp'); -- Cherry Jam + +-- Roasted Brussels Sprouts +INSERT INTO recipe_ingredients (recipe_id, ingredient_id, amount) VALUES +(2, 6, '500 g'), -- Brussels Sprouts +(2, 3, '1 tbsp'), -- Lemon Juice +(2, 7, '1 tsp'), -- Sesame seeds +(2, 8, '1 tsp'), -- Pepper +(2, 9, '1 tsp'), -- Salt +(2, 10, '2 tbsp'); -- Olive oil + +-- Mac & Cheese +INSERT INTO recipe_ingredients (recipe_id, ingredient_id, amount) VALUES +(3, 11, '200 g'), -- Macaroni +(3, 12, '50 g'), -- Butter +(3, 13, '2 tbsp'), -- Flour +(3, 9, '1 tsp'), -- Salt +(3, 8, '1 tsp'), -- Pepper +(3, 14, '200 ml'), -- Milk +(3, 15, '150 g'); -- Shredded Cheddar cheese + +-- Tamagoyaki Japanese Omelette +INSERT INTO recipe_ingredients (recipe_id, ingredient_id, amount) VALUES +(4, 16, '4'), -- Eggs +(4, 17, '1 tbsp'), -- Soy sauce +(4, 18, '1 tsp'), -- Sugar +(4, 9, '1 tsp'), -- Salt +(4, 10, '1 tbsp'); -- Olive oil diff --git a/Week2/prep/w2-request.sql b/Week2/prep/w2-request.sql new file mode 100644 index 000000000..6e076e107 --- /dev/null +++ b/Week2/prep/w2-request.sql @@ -0,0 +1,24 @@ +-- 1. All vegetarian recipes with potatoes (но картошки нет в данных) +SELECT r.name AS recipe_name +FROM recipes r +JOIN recipe_categories rc ON r.id = rc.recipe_id +JOIN categories c ON rc.category_id = c.id +WHERE c.name = 'Vegetarian'; + +-- 2. All cakes that do not need baking +SELECT r.name AS recipe_name +FROM recipes r +JOIN recipe_categories rc1 ON r.id = rc1.recipe_id +JOIN categories c1 ON rc1.category_id = c1.id +JOIN recipe_categories rc2 ON r.id = rc2.recipe_id +JOIN categories c2 ON rc2.category_id = c2.id +WHERE c1.name = 'Cake' AND c2.name = 'No-Bake'; + +-- 3. All vegan and Japanese recipes +SELECT r.name AS recipe_name +FROM recipes r +JOIN recipe_categories rc1 ON r.id = rc1.recipe_id +JOIN categories c1 ON rc1.category_id = c1.id +JOIN recipe_categories rc2 ON r.id = rc2.recipe_id +JOIN categories c2 ON rc2.category_id = c2.id +WHERE c1.name = 'Vegan' AND c2.name = 'Japanese'; \ No newline at end of file From 70a3bf16e5dda5bb32b8f57046d460705c415ee5 Mon Sep 17 00:00:00 2001 From: Ivan K Date: Sun, 23 Nov 2025 23:54:23 +0100 Subject: [PATCH 2/7] diagramma added --- Week2/prep/Lucid connection.png | Bin 0 -> 149782 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Week2/prep/Lucid connection.png diff --git a/Week2/prep/Lucid connection.png b/Week2/prep/Lucid connection.png new file mode 100644 index 0000000000000000000000000000000000000000..8321abffdf7c93c186a0319b120999aa717dcf8c GIT binary patch literal 149782 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
    A`xM!>PP$d7g8HVd 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

    5FH6TEwbiNJ7`xr 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%0Aft#!E!8PL1)53D6Geh`i5_qc>tVQ%$c!3kw;Uk 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 K-Ff=X5&s2uX-P@| literal 0 HcmV?d00001 From f6b0dc7335b654f3087bd44e1b55d8707fe42216 Mon Sep 17 00:00:00 2001 From: Ivan K Date: Sun, 23 Nov 2025 23:58:23 +0100 Subject: [PATCH 3/7] diagramma export added --- .../prep/Database ER diagram (crow's foot).png | Bin 0 -> 32036 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Week2/prep/Database ER diagram (crow's foot).png diff --git a/Week2/prep/Database ER diagram (crow's foot).png b/Week2/prep/Database ER diagram (crow's foot).png new file mode 100644 index 0000000000000000000000000000000000000000..579c05848d9821c136d84582205f5dbf2b99ceba GIT binary patch literal 32036 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 G@&5oSeZ2$# literal 0 HcmV?d00001 From 0872e29a652314684e8ac8cd3f3167629537aaf2 Mon Sep 17 00:00:00 2001 From: Ivan K Date: Mon, 24 Nov 2025 00:24:08 +0100 Subject: [PATCH 4/7] cascade added --- Week2/prep/w1-prep-exe.sql | 21 ++++++++++++--------- Week2/prep/w2-prep-insert-mok-data.sql | 3 ++- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/Week2/prep/w1-prep-exe.sql b/Week2/prep/w1-prep-exe.sql index d0c156004..7fbc2e311 100644 --- a/Week2/prep/w1-prep-exe.sql +++ b/Week2/prep/w1-prep-exe.sql @@ -1,13 +1,16 @@ -- Очищаем существующие таблицы (для повторного запуска) -- Drop existing tables (for re-running the script) -DROP TABLE IF EXISTS recipe_methods; -DROP TABLE IF EXISTS recipe_ingredients; -DROP TABLE IF EXISTS recipe_categories; -DROP TABLE IF EXISTS recipes; -DROP TABLE IF EXISTS cooking_methods; -DROP TABLE IF EXISTS ingredients; -DROP TABLE IF EXISTS main_ingredients; -DROP TABLE IF EXISTS categories; -DROP TABLE IF EXISTS cuisines; +DROP TABLE IF EXISTS recipe_ingredient_amounts CASCADE; +DROP TABLE IF EXISTS recipe_methods CASCADE; +DROP TABLE IF EXISTS recipe_ingredients CASCADE; +DROP TABLE IF EXISTS recipe_categories CASCADE; +DROP TABLE IF EXISTS recipes CASCADE; +DROP TABLE IF EXISTS cooking_methods CASCADE; +DROP TABLE IF EXISTS ingredients CASCADE; +DROP TABLE IF EXISTS main_ingredients CASCADE; +DROP TABLE IF EXISTS categories CASCADE; +DROP TABLE IF EXISTS cuisines CASCADE; + + --------------------------------------------------------- -- 1. Таблица кухонь (Italian, Chinese, Japanese…) -- Table of Cuisines (Italian, Chinese, Japanese…) diff --git a/Week2/prep/w2-prep-insert-mok-data.sql b/Week2/prep/w2-prep-insert-mok-data.sql index 52050007a..f78dc96fe 100644 --- a/Week2/prep/w2-prep-insert-mok-data.sql +++ b/Week2/prep/w2-prep-insert-mok-data.sql @@ -45,9 +45,10 @@ INSERT INTO ingredients (name) VALUES ('Eggs'), ('Soy sauce'), ('Sugar'); +ON CONFLICT (name) DO NOTHING; -- 5. Recipes -INSERT INTO recipes (name, cuisine_id, place_id, main_ingredient_id) VALUES +INSERT INTO recipes (name, cuisine_id, main_ingredient_id, instructions) VALUES ('No-Bake Cheesecake', NULL, NULL, 1), ('Roasted Brussels Sprouts', NULL, NULL, 2), ('Mac & Cheese', NULL, NULL, 3), From 06b63574563cc1b0ffff332ff4473145f8e2958d Mon Sep 17 00:00:00 2001 From: Ivan K Date: Mon, 24 Nov 2025 00:41:08 +0100 Subject: [PATCH 5/7] some small experiment with cascade and conflict I hope it will not break code --- Week2/prep/w1-prep-exe.sql | 16 ++-- Week2/prep/w2-prep-insert-mok-data.sql | 110 +++++++++++-------------- 2 files changed, 56 insertions(+), 70 deletions(-) diff --git a/Week2/prep/w1-prep-exe.sql b/Week2/prep/w1-prep-exe.sql index 7fbc2e311..584bf10ec 100644 --- a/Week2/prep/w1-prep-exe.sql +++ b/Week2/prep/w1-prep-exe.sql @@ -1,14 +1,14 @@ -- Очищаем существующие таблицы (для повторного запуска) -- Drop existing tables (for re-running the script) -DROP TABLE IF EXISTS recipe_ingredient_amounts CASCADE; -DROP TABLE IF EXISTS recipe_methods CASCADE; -DROP TABLE IF EXISTS recipe_ingredients CASCADE; -DROP TABLE IF EXISTS recipe_categories CASCADE; -DROP TABLE IF EXISTS recipes CASCADE; -DROP TABLE IF EXISTS cooking_methods CASCADE; -DROP TABLE IF EXISTS ingredients CASCADE; +DROP TABLE IF EXISTS cuisines CASCADE; DROP TABLE IF EXISTS main_ingredients CASCADE; +DROP TABLE IF EXISTS ingredients CASCADE; DROP TABLE IF EXISTS categories CASCADE; -DROP TABLE IF EXISTS cuisines CASCADE; +DROP TABLE IF EXISTS cooking_methods CASCADE; +DROP TABLE IF EXISTS recipes CASCADE; +DROP TABLE IF EXISTS recipe_categories CASCADE; +DROP TABLE IF EXISTS recipe_ingredients CASCADE; +DROP TABLE IF EXISTS recipe_methods CASCADE; +DROP TABLE IF EXISTS recipe_ingredient_amounts CASCADE; diff --git a/Week2/prep/w2-prep-insert-mok-data.sql b/Week2/prep/w2-prep-insert-mok-data.sql index f78dc96fe..05a9b7d77 100644 --- a/Week2/prep/w2-prep-insert-mok-data.sql +++ b/Week2/prep/w2-prep-insert-mok-data.sql @@ -1,16 +1,19 @@ +-- ========================================== +-- Mock data inserts for Week 2 Prep Exercise +-- ========================================== --- I will use MOCK data so we made id manually for clarity. - --- 1. Cuisines (только японская встречается явно) -- Cuisines (only Japanese is explicitly mentioned) +-- 1. Cuisines INSERT INTO cuisines (name) VALUES -('Japanese'); +('Japanese') +ON CONFLICT (name) DO NOTHING; --- 2. Main ingredients (по твоим рецептам выделим примерные) -- Main ingredients (based on your recipes, approximate) +-- 2. Main ingredients INSERT INTO main_ingredients (name) VALUES ('Cheese'), ('Vegetables'), ('Pasta'), -('Eggs'); +('Eggs') +ON CONFLICT (name) DO NOTHING; -- 3. Categories INSERT INTO categories (name) VALUES @@ -19,7 +22,8 @@ INSERT INTO categories (name) VALUES ('Vegetarian'), ('Vegan'), ('Gluten-Free'), -('Japanese'); +('Japanese') +ON CONFLICT (name) DO NOTHING; -- 4. Ingredients INSERT INTO ingredients (name) VALUES @@ -42,71 +46,53 @@ INSERT INTO ingredients (name) VALUES ('Flour'), ('Milk'), ('Shredded Cheddar cheese'), -('Eggs'), ('Soy sauce'), -('Sugar'); +('Sugar') ON CONFLICT (name) DO NOTHING; -- 5. Recipes -INSERT INTO recipes (name, cuisine_id, main_ingredient_id, instructions) VALUES -('No-Bake Cheesecake', NULL, NULL, 1), -('Roasted Brussels Sprouts', NULL, NULL, 2), -('Mac & Cheese', NULL, NULL, 3), -('Tamagoyaki Japanese Omelette', 1, NULL, 4); +INSERT INTO recipes (name, cuisine_id, main_ingredient_id) VALUES +('No-Bake Cheesecake', NULL, 1), +('Roasted Brussels Sprouts', NULL, 2), +('Mac & Cheese', NULL, 3), +('Tamagoyaki Japanese Omelette', 1, 4) +ON CONFLICT DO NOTHING; -- 6. Recipe ↔ Categories --- No-Bake Cheesecake -INSERT INTO recipe_categories (recipe_id, category_id) VALUES -(1, 1), -- Cake -(1, 2), -- No-Bake -(1, 3); -- Vegetarian - --- Roasted Brussels Sprouts -INSERT INTO recipe_categories (recipe_id, category_id) VALUES -(2, 4), -- Vegan -(2, 5); -- Gluten-Free - --- Mac & Cheese INSERT INTO recipe_categories (recipe_id, category_id) VALUES -(3, 3); -- Vegetarian - --- Tamagoyaki Japanese Omelette -INSERT INTO recipe_categories (recipe_id, category_id) VALUES -(4, 3), -- Vegetarian -(4, 6); -- Japanese +(1, 1), (1, 2), (1, 3), +(2, 4), (2, 5), +(3, 3), +(4, 3), (4, 6) +ON CONFLICT DO NOTHING; -- 7. Recipe ↔ Ingredients --- No-Bake Cheesecake INSERT INTO recipe_ingredients (recipe_id, ingredient_id, amount) VALUES -(1, 1, '200 ml'), -- Condensed milk -(1, 2, '250 g'), -- Cream Cheese -(1, 3, '1 tbsp'), -- Lemon Juice -(1, 4, '1 crust'), -- Pie Crust -(1, 5, '2 tbsp'); -- Cherry Jam - +-- No-Bake Cheesecake +(1, 5, '200 ml'), +(1, 6, '250 g'), +(1, 7, '1 tbsp'), +(1, 8, '1 crust'), +(1, 9, '2 tbsp'), -- Roasted Brussels Sprouts -INSERT INTO recipe_ingredients (recipe_id, ingredient_id, amount) VALUES -(2, 6, '500 g'), -- Brussels Sprouts -(2, 3, '1 tbsp'), -- Lemon Juice -(2, 7, '1 tsp'), -- Sesame seeds -(2, 8, '1 tsp'), -- Pepper -(2, 9, '1 tsp'), -- Salt -(2, 10, '2 tbsp'); -- Olive oil - +(2, 10, '500 g'), +(2, 7, '1 tbsp'), +(2, 11, '1 tsp'), +(2, 12, '1 tsp'), +(2, 13, '1 tsp'), +(2, 14, '2 tbsp'), -- Mac & Cheese -INSERT INTO recipe_ingredients (recipe_id, ingredient_id, amount) VALUES -(3, 11, '200 g'), -- Macaroni -(3, 12, '50 g'), -- Butter -(3, 13, '2 tbsp'), -- Flour -(3, 9, '1 tsp'), -- Salt -(3, 8, '1 tsp'), -- Pepper -(3, 14, '200 ml'), -- Milk -(3, 15, '150 g'); -- Shredded Cheddar cheese - +(3, 15, '200 g'), +(3, 16, '50 g'), +(3, 17, '2 tbsp'), +(3, 13, '1 tsp'), +(3, 12, '1 tsp'), +(3, 18, '200 ml'), +(3, 19, '150 g'), -- Tamagoyaki Japanese Omelette -INSERT INTO recipe_ingredients (recipe_id, ingredient_id, amount) VALUES -(4, 16, '4'), -- Eggs -(4, 17, '1 tbsp'), -- Soy sauce -(4, 18, '1 tsp'), -- Sugar -(4, 9, '1 tsp'), -- Salt -(4, 10, '1 tbsp'); -- Olive oil +(4, 4, '4'), +(4, 20, '1 tbsp'), +(4, 21, '1 tsp'), +(4, 13, '1 tsp'), +(4, 14, '1 tbsp') +ON CONFLICT DO NOTHING; \ No newline at end of file From f938e38a3ba68c9daa43e0d4638c74a111bf519e Mon Sep 17 00:00:00 2001 From: Ivan K Date: Wed, 10 Dec 2025 21:47:56 +0100 Subject: [PATCH 6/7] assinment w4 done --- Week4/homework/task1/README.md | 11 ++ Week4/homework/task1/package-lock.json | 173 +++++++++++++++++++ Week4/homework/task1/package.json | 7 + Week4/homework/task1/scripts/aggregations.js | 72 ++++++++ Week4/homework/task1/scripts/import_csv.js | 35 ++++ Week4/homework/task2/index.js | 27 +++ Week4/homework/task2/package-lock.json | 160 +++++++++++++++++ Week4/homework/task2/package.json | 7 + Week4/homework/task2/setup.js | 62 +++++++ Week4/homework/task2/transfer.js | 80 +++++++++ 10 files changed, 634 insertions(+) create mode 100644 Week4/homework/task1/README.md create mode 100644 Week4/homework/task1/package-lock.json create mode 100644 Week4/homework/task1/package.json create mode 100644 Week4/homework/task1/scripts/aggregations.js create mode 100644 Week4/homework/task1/scripts/import_csv.js create mode 100644 Week4/homework/task2/index.js create mode 100644 Week4/homework/task2/package-lock.json create mode 100644 Week4/homework/task2/package.json create mode 100644 Week4/homework/task2/setup.js create mode 100644 Week4/homework/task2/transfer.js diff --git a/Week4/homework/task1/README.md b/Week4/homework/task1/README.md new file mode 100644 index 000000000..cc90d8d8b --- /dev/null +++ b/Week4/homework/task1/README.md @@ -0,0 +1,11 @@ +exercise 3.1 - folder task 1 +exercise 3.1 (part 1) import - file import_csv.js +exercises 3.1 (parts 2 and 3)- file aggregations.js + + +exercises 3.2 - folder taks 2 + + +## Why two containers? +1. Exercise 1: Simple MongoDB on port 27018 +2. Exercise 2: MongoDB with a replica set on port 27017 (required for transactions) \ No newline at end of file diff --git a/Week4/homework/task1/package-lock.json b/Week4/homework/task1/package-lock.json new file mode 100644 index 000000000..fa2232838 --- /dev/null +++ b/Week4/homework/task1/package-lock.json @@ -0,0 +1,173 @@ +{ + "name": "ex1-aggregation", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ex1-aggregation", + "dependencies": { + "csv-parser": "^3.0.0", + "mongodb": "^6.0.0" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.4.0.tgz", + "integrity": "sha512-ZHzx7Z3rdlWL1mECydvpryWN/ETXJiCxdgQKTAH+djzIPe77HdnSizKBDi1TVDXZjXyOj2IqEG/vPw71ULF06w==", + "license": "MIT", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", + "license": "MIT" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "license": "MIT", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/bson": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.4.tgz", + "integrity": "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/csv-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/csv-parser/-/csv-parser-3.2.0.tgz", + "integrity": "sha512-fgKbp+AJbn1h2dcAHKIdKNSSjfp43BZZykXsCjzALjKy80VXQNHPFJ6T9Afwdzoj24aMkq8GwDS7KGcDPpejrA==", + "license": "MIT", + "bin": { + "csv-parser": "bin/csv-parser" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "license": "MIT" + }, + "node_modules/mongodb": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.21.0.tgz", + "integrity": "sha512-URyb/VXMjJ4da46OeSXg+puO39XH9DeQpWCslifrRn9JWugy0D+DvvBvkm2WxmHe61O/H19JM66p1z7RHVkZ6A==", + "license": "Apache-2.0", + "dependencies": { + "@mongodb-js/saslprep": "^1.3.0", + "bson": "^6.10.4", + "mongodb-connection-string-url": "^3.0.2" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.3.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz", + "integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==", + "license": "Apache-2.0", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^14.1.0 || ^13.0.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "license": "MIT", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + } + } +} diff --git a/Week4/homework/task1/package.json b/Week4/homework/task1/package.json new file mode 100644 index 000000000..c8ffeb026 --- /dev/null +++ b/Week4/homework/task1/package.json @@ -0,0 +1,7 @@ +{ + "name": "ex1-aggregation", + "dependencies": { + "mongodb": "^6.0.0", + "csv-parser": "^3.0.0" + } +} \ No newline at end of file diff --git a/Week4/homework/task1/scripts/aggregations.js b/Week4/homework/task1/scripts/aggregations.js new file mode 100644 index 000000000..c579a1e03 --- /dev/null +++ b/Week4/homework/task1/scripts/aggregations.js @@ -0,0 +1,72 @@ +const { MongoClient } = require('mongodb'); + +// Функция 1: Население по годам для страны --- exercise asks for country +async function getPopulationByYear(country) { + const client = new MongoClient('mongodb://localhost:27018'); + + try { + await client.connect(); + const collection = client.db('population_db').collection('population'); + + const result = await collection.aggregate([ + { $match: { + Country: country, + Year: { $in: [1950, 1960, 1970, 1980, 1990, 2000, 2010, 2020, 2022] } + }}, + { $group: { + _id: "$Year", + countPopulation: { $sum: { $add: ["$M", "$F"] } } + }}, + { $sort: { _id: 1 } } + ]).toArray(); + + return result; + } finally { + await client.close(); + } +} + +// Функция 2: Данные по континентам --- exercise asks for continents but data uses regions +async function getContinentData(year, age) { + const client = new MongoClient('mongodb://localhost:27018'); + + try { + await client.connect(); + const collection = client.db('population_db').collection('population'); + + const result = await collection.aggregate([ + { $match: { + Year: year, + Age: age, + Country: { + $in: [ + "AFRICA", "ASIA", "EUROPE", + "LATIN AMERICA AND THE CARIBBEAN", + "NORTHERN AMERICA", "OCEANIA" + ] + } + }}, + { $addFields: { + TotalPopulation: { $add: ["$M", "$F"] } + }}, + { $sort: { Country: 1 } } + ]).toArray(); + + return result; + } finally { + await client.close(); + } +} + +// Тестирование обеих функций --- test if needed +async function main() { + console.log('=== Population by year for Netherlands ==='); + const netherlandsData = await getPopulationByYear("Netherlands"); + console.log(JSON.stringify(netherlandsData, null, 2)); + + console.log('\n=== Continent data for 2020, age 100+ ==='); + const continentData = await getContinentData(2020, "100+"); + console.log(JSON.stringify(continentData, null, 2)); +} + +main().catch(console.error); \ No newline at end of file diff --git a/Week4/homework/task1/scripts/import_csv.js b/Week4/homework/task1/scripts/import_csv.js new file mode 100644 index 000000000..20dde4858 --- /dev/null +++ b/Week4/homework/task1/scripts/import_csv.js @@ -0,0 +1,35 @@ +const { MongoClient } = require('mongodb'); +const fs = require('fs'); +const csv = require('csv-parser'); + +async function importData() { + const client = new MongoClient('mongodb://localhost:27018'); + + try { + await client.connect(); + const db = client.db('population_db'); + const collection = db.collection('population'); + + const documents = []; + fs.createReadStream('../../ex1-aggregation/population_pyramid_1950-2022.csv') + .pipe(csv()) + .on('data', (row) => { + documents.push({ + Country: row.Country, + Year: parseInt(row.Year), + Age: row.Age, + M: parseInt(row.M), + F: parseInt(row.F) + }); + }) + .on('end', async () => { + await collection.insertMany(documents); + console.log(`Imported ${documents.length} documents`); + await client.close(); + }); + } catch (error) { + console.error(error); + } +} + +importData(); \ No newline at end of file diff --git a/Week4/homework/task2/index.js b/Week4/homework/task2/index.js new file mode 100644 index 000000000..55fb17264 --- /dev/null +++ b/Week4/homework/task2/index.js @@ -0,0 +1,27 @@ +import { setupDatabase } from './setup.js'; +import { transferMoney } from './transfer.js'; + +async function main() { + // 1. Настраиваем базу данных + await setupDatabase(); + + // 2. Выполняем перевод + await transferMoney(101, 102, 1000, "Test transfer"); + + // 3. Проверяем результат + const { MongoClient } = await import('mongodb'); + const client = new MongoClient('mongodb://localhost:27017/?replicaSet=rs0&directConnection=true'); + + await client.connect(); + const collection = client.db('bank_db').collection('accounts'); + + const account101 = await collection.findOne({ account_number: 101 }); + const account102 = await collection.findOne({ account_number: 102 }); + + console.log('\nAccount 101 balance:', account101.balance); + console.log('Account 102 balance:', account102.balance); + + await client.close(); +} + +main().catch(console.error); \ No newline at end of file diff --git a/Week4/homework/task2/package-lock.json b/Week4/homework/task2/package-lock.json new file mode 100644 index 000000000..35bd854e1 --- /dev/null +++ b/Week4/homework/task2/package-lock.json @@ -0,0 +1,160 @@ +{ + "name": "ex2-transactions", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ex2-transactions", + "dependencies": { + "mongodb": "^6.0.0" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.4.0.tgz", + "integrity": "sha512-ZHzx7Z3rdlWL1mECydvpryWN/ETXJiCxdgQKTAH+djzIPe77HdnSizKBDi1TVDXZjXyOj2IqEG/vPw71ULF06w==", + "license": "MIT", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", + "license": "MIT" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "license": "MIT", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/bson": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.4.tgz", + "integrity": "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "license": "MIT" + }, + "node_modules/mongodb": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.21.0.tgz", + "integrity": "sha512-URyb/VXMjJ4da46OeSXg+puO39XH9DeQpWCslifrRn9JWugy0D+DvvBvkm2WxmHe61O/H19JM66p1z7RHVkZ6A==", + "license": "Apache-2.0", + "dependencies": { + "@mongodb-js/saslprep": "^1.3.0", + "bson": "^6.10.4", + "mongodb-connection-string-url": "^3.0.2" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.3.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz", + "integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==", + "license": "Apache-2.0", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^14.1.0 || ^13.0.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "license": "MIT", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + } + } +} diff --git a/Week4/homework/task2/package.json b/Week4/homework/task2/package.json new file mode 100644 index 000000000..1d6bb922a --- /dev/null +++ b/Week4/homework/task2/package.json @@ -0,0 +1,7 @@ +{ + "name": "ex2-transactions", + "type": "module", + "dependencies": { + "mongodb": "^6.0.0" + } +} \ No newline at end of file diff --git a/Week4/homework/task2/setup.js b/Week4/homework/task2/setup.js new file mode 100644 index 000000000..235d01669 --- /dev/null +++ b/Week4/homework/task2/setup.js @@ -0,0 +1,62 @@ +import { MongoClient } from 'mongodb'; + +export async function setupDatabase() { + const client = new MongoClient('mongodb://localhost:27017/?replicaSet=rs0&directConnection=true'); + + try { + await client.connect(); + const collection = client.db('bank_db').collection('accounts'); + + // Очищаем коллекцию + await collection.deleteMany({}); + + // Создаем тестовые счета + const accounts = [ + { + account_number: 101, + balance: 10000, + account_changes: [ + { + change_number: 1, + amount: 10000, + changed_date: new Date(), + remark: "Initial deposit" + } + ] + }, + { + account_number: 102, + balance: 5000, + account_changes: [ + { + change_number: 1, + amount: 5000, + changed_date: new Date(), + remark: "Initial deposit" + } + ] + }, + { + account_number: 103, + balance: 2000, + account_changes: [ + { + change_number: 1, + amount: 2000, + changed_date: new Date(), + remark: "Initial deposit" + } + ] + } + ]; + + await collection.insertMany(accounts); + console.log('Database setup completed'); + + } finally { + await client.close(); + } +} + +// Для тестирования +// setupDatabase(); \ No newline at end of file diff --git a/Week4/homework/task2/transfer.js b/Week4/homework/task2/transfer.js new file mode 100644 index 000000000..76036533a --- /dev/null +++ b/Week4/homework/task2/transfer.js @@ -0,0 +1,80 @@ +import { MongoClient } from 'mongodb'; + +export async function transferMoney(fromAccount, toAccount, amount, remark) { + const client = new MongoClient('mongodb://localhost:27017/?replicaSet=rs0&directConnection=true'); + + try { + await client.connect(); + const collection = client.db('bank_db').collection('accounts'); + + // Начинаем транзакцию + const session = client.startSession(); + + try { + const result = await session.withTransaction(async () => { + // 1. Проверяем существование счетов + const fromAcc = await collection.findOne( + { account_number: fromAccount }, + { session } + ); + const toAcc = await collection.findOne( + { account_number: toAccount }, + { session } + ); + + if (!fromAcc || !toAcc) { + throw new Error('Account not found'); + } + + // 2. Проверяем достаточно ли денег + if (fromAcc.balance < amount) { + throw new Error('Insufficient funds'); + } + + // 3. Обновляем балансы + const lastChangeFrom = fromAcc.account_changes.length; + const lastChangeTo = toAcc.account_changes.length; + + await collection.updateOne( + { account_number: fromAccount }, + { + $inc: { balance: -amount }, + $push: { + account_changes: { + change_number: lastChangeFrom + 1, + amount: -amount, + changed_date: new Date(), + remark: remark + } + } + }, + { session } + ); + + await collection.updateOne( + { account_number: toAccount }, + { + $inc: { balance: amount }, + $push: { + account_changes: { + change_number: lastChangeTo + 1, + amount: amount, + changed_date: new Date(), + remark: remark + } + } + }, + { session } + ); + + console.log(`Transfer successful: ${amount} from ${fromAccount} to ${toAccount}`); + }); + + } finally { + await session.endSession(); + } + + } finally { + await client.close(); + } +} \ No newline at end of file From 4948ac901284bb8ecec7d547df56e772c4f7a7e3 Mon Sep 17 00:00:00 2001 From: Ivan K Date: Wed, 10 Dec 2025 21:50:18 +0100 Subject: [PATCH 7/7] commets update --- Week4/homework/task2/index.js | 6 +++--- Week4/homework/task2/setup.js | 5 ++--- Week4/homework/task2/transfer.js | 8 ++++---- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/Week4/homework/task2/index.js b/Week4/homework/task2/index.js index 55fb17264..87f8b81a4 100644 --- a/Week4/homework/task2/index.js +++ b/Week4/homework/task2/index.js @@ -2,13 +2,13 @@ import { setupDatabase } from './setup.js'; import { transferMoney } from './transfer.js'; async function main() { - // 1. Настраиваем базу данных + // 1. Настраиваем базу данных --- setup the database await setupDatabase(); - // 2. Выполняем перевод + // 2. Выполняем перевод --- perform a transfer await transferMoney(101, 102, 1000, "Test transfer"); - // 3. Проверяем результат + // 3. Проверяем результат --- check the result const { MongoClient } = await import('mongodb'); const client = new MongoClient('mongodb://localhost:27017/?replicaSet=rs0&directConnection=true'); diff --git a/Week4/homework/task2/setup.js b/Week4/homework/task2/setup.js index 235d01669..480b2cfbe 100644 --- a/Week4/homework/task2/setup.js +++ b/Week4/homework/task2/setup.js @@ -7,10 +7,10 @@ export async function setupDatabase() { await client.connect(); const collection = client.db('bank_db').collection('accounts'); - // Очищаем коллекцию + // Очищаем коллекцию --- clear the collection await collection.deleteMany({}); - // Создаем тестовые счета + // Создаем тестовые счета --- create test accounts const accounts = [ { account_number: 101, @@ -58,5 +58,4 @@ export async function setupDatabase() { } } -// Для тестирования // setupDatabase(); \ No newline at end of file diff --git a/Week4/homework/task2/transfer.js b/Week4/homework/task2/transfer.js index 76036533a..5c4892fe5 100644 --- a/Week4/homework/task2/transfer.js +++ b/Week4/homework/task2/transfer.js @@ -7,12 +7,12 @@ export async function transferMoney(fromAccount, toAccount, amount, remark) { await client.connect(); const collection = client.db('bank_db').collection('accounts'); - // Начинаем транзакцию + // Начинаем транзакцию --- start a transaction const session = client.startSession(); try { const result = await session.withTransaction(async () => { - // 1. Проверяем существование счетов + // 1. Проверяем существование счетов --- check account existence const fromAcc = await collection.findOne( { account_number: fromAccount }, { session } @@ -26,12 +26,12 @@ export async function transferMoney(fromAccount, toAccount, amount, remark) { throw new Error('Account not found'); } - // 2. Проверяем достаточно ли денег + // 2. Проверяем достаточно ли денег на счете отправителя --- check sufficient funds if (fromAcc.balance < amount) { throw new Error('Insufficient funds'); } - // 3. Обновляем балансы + // 3. Обновляем балансы и добавляем записи об изменениях --- update balances and add change records const lastChangeFrom = fromAcc.account_changes.length; const lastChangeTo = toAcc.account_changes.length;