From 6cec7ca6ddc3c33fcd59a7e5aa6371eaf41d29ea Mon Sep 17 00:00:00 2001 From: Nils-Johan Gynther Date: Sat, 18 Apr 2026 08:41:57 +0200 Subject: [PATCH] feat(seeds): add seed_product_categories.sql for product-category mapping --- db/seeds/categories_supplement.sql | 5 +- db/seeds/seed_product_categories.sql | 392 +++++++++++++++++++++++++++ 2 files changed, 396 insertions(+), 1 deletion(-) create mode 100644 db/seeds/seed_product_categories.sql diff --git a/db/seeds/categories_supplement.sql b/db/seeds/categories_supplement.sql index 22daaa15..6d23ef65 100644 --- a/db/seeds/categories_supplement.sql +++ b/db/seeds/categories_supplement.sql @@ -1,7 +1,10 @@ -- ============================================================ -- Supplement: Kategorier från produktfilen --- Kör på servern: mysql -u root -p recipe_app < db/seeds/categories_supplement.sql -- Använder INSERT IGNORE + subqueries — säkert att köra flera gånger. +-- +-- Kör på servern: +-- DB_PASS=$(grep MARIADB_ROOT_PASSWORD .env | cut -d= -f2) +-- docker exec -i recipe-db mariadb -uroot -p"$DB_PASS" recipe_app < db/seeds/categories_supplement.sql -- ============================================================ -- ============================================================ diff --git a/db/seeds/seed_product_categories.sql b/db/seeds/seed_product_categories.sql new file mode 100644 index 00000000..bc862b04 --- /dev/null +++ b/db/seeds/seed_product_categories.sql @@ -0,0 +1,392 @@ +-- ============================================================ +-- Seed: Koppla produkter till kategorier +-- Kör efter categories_supplement.sql +-- Använder UPDATE + subqueries — säkert att köra flera gånger. +-- Berör bara produkter vi är säkra på hamnar rätt. +-- +-- Kör på servern: +-- DB_PASS=$(grep MARIADB_ROOT_PASSWORD .env | cut -d= -f2) +-- docker exec -i recipe-db mariadb -uroot -p"$DB_PASS" recipe_app < db/seeds/seed_product_categories.sql +-- ============================================================ + +-- ============================================================ +-- Frukt & Grönt > Frukt > Druvor +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Frukt' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Druvor' + WHERE c1.name = 'Frukt & Grönt' AND c1.parentId IS NULL +) WHERE `name` IN ('Druvor', 'Gröna druvor', 'Röda druvor'); + +-- ============================================================ +-- Frukt & Grönt > Frukt > Citrusfrukt +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Frukt' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Citrusfrukt' + WHERE c1.name = 'Frukt & Grönt' AND c1.parentId IS NULL +) WHERE `name` IN ('Apelsin', 'Citron', 'Lime'); + +-- ============================================================ +-- Frukt & Grönt > Frukt (inga djupare underkategorier) +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c2.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Frukt' + WHERE c1.name = 'Frukt & Grönt' AND c1.parentId IS NULL +) WHERE `name` IN ('Ananas', 'Banan', 'Kiwi', 'Mango', 'Päron'); + +-- ============================================================ +-- Frukt & Grönt > Färska bär +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c2.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Färska bär' + WHERE c1.name = 'Frukt & Grönt' AND c1.parentId IS NULL +) WHERE `name` IN ('Blåbär', 'Hallon', 'Jordgubbar'); + +-- ============================================================ +-- Frukt & Grönt > Grönsaker > Tomater +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Grönsaker' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Tomater' + WHERE c1.name = 'Frukt & Grönt' AND c1.parentId IS NULL +) WHERE `name` IN ('Tomat'); + +-- ============================================================ +-- Frukt & Grönt > Grönsaker > Övriga grönsaker +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Grönsaker' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Övriga grönsaker' + WHERE c1.name = 'Frukt & Grönt' AND c1.parentId IS NULL +) WHERE `name` IN ( + 'Aubergine', 'Blomkål', 'Broccoli', 'Grönkål', 'Gurka', + 'Sallad', 'Selleri', 'Spenat', 'Vitkål' +); + +-- ============================================================ +-- Frukt & Grönt > Potatis & rotsaker > Lök +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Potatis & rotsaker' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Lök' + WHERE c1.name = 'Frukt & Grönt' AND c1.parentId IS NULL +) WHERE `name` IN ('Lök', 'Purjolök', 'Rödlök', 'Vitlök'); + +-- ============================================================ +-- Frukt & Grönt > Potatis & rotsaker > Rotsaker +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Potatis & rotsaker' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Rotsaker' + WHERE c1.name = 'Frukt & Grönt' AND c1.parentId IS NULL +) WHERE `name` IN ('Kålrot', 'Morot', 'Palsternacka', 'Rödbeta'); + +-- ============================================================ +-- Frukt & Grönt > Potatis & rotsaker (ingen djupare nivå) +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c2.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Potatis & rotsaker' + WHERE c1.name = 'Frukt & Grönt' AND c1.parentId IS NULL +) WHERE `name` IN ('Potatis', 'Sötpotatis'); + +-- ============================================================ +-- Frukt & Grönt > Kryddor & smaksättare > Smaksättare +-- (färska örter säljs i grönsaksdisken) +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Kryddor & smaksättare' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Smaksättare' + WHERE c1.name = 'Frukt & Grönt' AND c1.parentId IS NULL +) WHERE `name` IN ( + 'Färsk basilika', 'Färsk chili', 'Färsk dill', 'Färsk ingefära', + 'Färsk koriander', 'Färsk oregano', 'Färsk persilja', + 'Färsk rosmarin', 'Färsk timjan' +); + +-- ============================================================ +-- Mejeri, ost & ägg > Mjölk > Standardmjölk +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Mjölk' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Standardmjölk' + WHERE c1.name = 'Mejeri, ost & ägg' AND c1.parentId IS NULL +) WHERE `name` IN ('Standardmjölk'); + +-- ============================================================ +-- Mejeri, ost & ägg > Mjölk (ingen djupare nivå) +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c2.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Mjölk' + WHERE c1.name = 'Mejeri, ost & ägg' AND c1.parentId IS NULL +) WHERE `name` IN ('Lättmjölk', 'Mellanmjölk', 'Mjölk'); + +-- ============================================================ +-- Mejeri, ost & ägg > Filmjölk & Yoghurt > Filmjölk +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Filmjölk & Yoghurt' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Filmjölk' + WHERE c1.name = 'Mejeri, ost & ägg' AND c1.parentId IS NULL +) WHERE `name` IN ('Fil'); + +-- ============================================================ +-- Mejeri, ost & ägg (ingen djupare nivå — Ägg, Grädde, Smör etc.) +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT id FROM `Category` + WHERE name = 'Mejeri, ost & ägg' AND parentId IS NULL +) WHERE `name` IN ('Ägg', 'Crème fraiche', 'Grädde', 'Gräddfil', 'Smör'); + +-- ============================================================ +-- Kött, chark & fågel > Fågel +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c2.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Fågel' + WHERE c1.name = 'Kött, chark & fågel' AND c1.parentId IS NULL +) WHERE `name` IN ( + 'Anka', 'Ankbröst', 'Fasan', 'Gås', + 'Kalkon', 'Kalkonfilé', 'Kalkonfärs', + 'Kyckling', 'Kycklingben', 'Kycklingben (lårben)', 'Kycklingben (vingben)', + 'Kycklingbröst', 'Kycklingfilé', 'Kycklingfärs', 'Kycklinggrund', + 'Kycklinghals', 'Kycklinghel', 'Kycklinghjärta', 'Kycklingkarré', + 'Kycklingklubba', 'Kycklingkropp', 'Kycklinglever', 'Kycklinglår', + 'Kycklingmälta', 'Kycklingrevben', 'Kycklingvinge' +); + +-- ============================================================ +-- Kött, chark & fågel > Kött > Fläsk +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Kött' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Fläsk' + WHERE c1.name = 'Kött, chark & fågel' AND c1.parentId IS NULL +) WHERE `name` IN ( + 'Fläskfilé', 'Fläskkarré', 'Fläskkotlett', + 'Fläskrevben', 'Fläsksidfläsk', 'Fläskytterfilé' +); + +-- ============================================================ +-- Kött, chark & fågel > Kött > Färdiglagat & pannfärdigt +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Kött' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Färdiglagat & pannfärdigt' + WHERE c1.name = 'Kött, chark & fågel' AND c1.parentId IS NULL +) WHERE `name` IN ('Köttbullar'); + +-- ============================================================ +-- Kött, chark & fågel > Kött (ingen djupare nivå) +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c2.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Kött' + WHERE c1.name = 'Kött, chark & fågel' AND c1.parentId IS NULL +) WHERE `name` IN ( + 'Blandfärs', 'Entrecote', + 'Kalvfilé', 'Kalvkotlett', + 'Köttfärs', 'Lammbog', 'Lammfärs', 'Lammhals', 'Lammkotlett', + 'Lammrack', 'Lammrevben', 'Lammstek', + 'Nötfärs', 'Oxfile', 'Oxhjärta', 'Oxlever', + 'Råbiff', 'Renkött', 'Rimmat kött', 'Tartar', + 'Vildsvin', 'Viltkött', 'Älgkött' +); + +-- ============================================================ +-- Kött, chark & fågel > Korv +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c2.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Korv' + WHERE c1.name = 'Kött, chark & fågel' AND c1.parentId IS NULL +) WHERE `name` IN ('Falukorv', 'Korv'); + +-- ============================================================ +-- Kött, chark & fågel > Pålägg > Skivat pålägg +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Pålägg' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Skivat pålägg' + WHERE c1.name = 'Kött, chark & fågel' AND c1.parentId IS NULL +) WHERE `name` IN ('Skinka'); + +-- ============================================================ +-- Glass, godis & snacks > Choklad +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c2.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Choklad' + WHERE c1.name = 'Glass, godis & snacks' AND c1.parentId IS NULL +) WHERE `name` IN ('Choklad'); + +-- ============================================================ +-- Glass, godis & snacks > Chips, snacks & dip > Chips +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Chips, snacks & dip' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Chips' + WHERE c1.name = 'Glass, godis & snacks' AND c1.parentId IS NULL +) WHERE `name` IN ('Chips'); + +-- ============================================================ +-- Dryck > Läsk och Energidryck +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c2.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Läsk och Energidryck' + WHERE c1.name = 'Dryck' AND c1.parentId IS NULL +) WHERE `name` IN ('Läsk'); + +-- ============================================================ +-- Dryck (toppnivå — ingen passande underkategori) +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT id FROM `Category` + WHERE name = 'Dryck' AND parentId IS NULL +) WHERE `name` IN ('Juice', 'Kaffe', 'Must', 'Saft', 'Te', 'Vatten'); + +-- ============================================================ +-- Fryst > Färdigmat > Pizza, paj & piroger +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Färdigmat' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Pizza, paj & piroger' + WHERE c1.name = 'Fryst' AND c1.parentId IS NULL +) WHERE `name` IN ('Pizza'); + +-- ============================================================ +-- Fryst > Grönsaker & kryddor > Grönsaker +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Grönsaker & kryddor' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Grönsaker' + WHERE c1.name = 'Fryst' AND c1.parentId IS NULL +) WHERE `name` IN ('Fryst dill', 'Fryst persilja'); + +-- ============================================================ +-- Skafferi > Pasta, ris & matgryn > Pasta +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Pasta, ris & matgryn' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Pasta' + WHERE c1.name = 'Skafferi' AND c1.parentId IS NULL +) WHERE `name` IN ('Lasagne', 'Pasta', 'Spaghetti'); + +-- ============================================================ +-- Skafferi > Pasta, ris & matgryn (ingen djupare nivå) +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c2.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Pasta, ris & matgryn' + WHERE c1.name = 'Skafferi' AND c1.parentId IS NULL +) WHERE `name` IN ('Havregryn', 'Müsli', 'Ris'); + +-- ============================================================ +-- Skafferi > Kryddor & smaksättare > Kryddor +-- (torkade örter och malda kryddor) +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Kryddor & smaksättare' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Kryddor' + WHERE c1.name = 'Skafferi' AND c1.parentId IS NULL +) WHERE `name` IN ( + 'Basilika', 'Chiliflingor', 'Chilipulver', 'Dill', + 'Ingefärspulver', 'Kanelstång', 'Korianderfrön', 'Kumminsfrön', + 'Malen kanel', 'Malet kummin', 'Oregano', + 'Paprikapulver', 'Persilja', 'Rosmarin', 'Salt', + 'Stark paprikapulver', 'Svartpeppar', 'Söt paprikapulver', + 'Rökt paprikapulver', 'Timjan', 'Vitpeppar', + 'Torkad basilika', 'Torkad chili', 'Torkad dill', + 'Torkad ingefära', 'Torkad koriander', 'Torkad oregano', + 'Torkad persilja', 'Torkad rosmarin', 'Torkad timjan' +); + +-- ============================================================ +-- Skafferi > Kryddor & smaksättare > Sås, dressing & majonnäs +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Kryddor & smaksättare' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Sås, dressing & majonnäs' + WHERE c1.name = 'Skafferi' AND c1.parentId IS NULL +) WHERE `name` IN ('Ketchup', 'Majonnäs', 'Vinäger'); + +-- ============================================================ +-- Skafferi > Kryddor & smaksättare > Övriga smaksättare +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Kryddor & smaksättare' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Övriga smaksättare' + WHERE c1.name = 'Skafferi' AND c1.parentId IS NULL +) WHERE `name` IN ('Olivolja'); + +-- ============================================================ +-- Skafferi > Torra baljväxter +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c2.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Torra baljväxter' + WHERE c1.name = 'Skafferi' AND c1.parentId IS NULL +) WHERE `name` IN ('Bönor', 'Kikärter', 'Linser'); + +-- ============================================================ +-- Skafferi > Torkad frukt +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c2.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Torkad frukt' + WHERE c1.name = 'Skafferi' AND c1.parentId IS NULL +) WHERE `name` IN ('Russin'); + +-- ============================================================ +-- Skafferi > Bakning > Baktillbehör +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Bakning' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Baktillbehör' + WHERE c1.name = 'Skafferi' AND c1.parentId IS NULL +) WHERE `name` IN ('Mjöl', 'Socker'); + +-- ============================================================ +-- Skafferi > Kryddor & smaksättare (ingen djupare nivå) +-- (buljong används som smaksättare/matlagningsingrediens) +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c2.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Kryddor & smaksättare' + WHERE c1.name = 'Skafferi' AND c1.parentId IS NULL +) WHERE `name` IN ('Buljong'); + +-- ============================================================ +-- Skafferi > Konserver & burkar > Fruktkonserver +-- ============================================================ +UPDATE `Product` SET `categoryId` = ( + SELECT c3.id FROM `Category` c1 + JOIN `Category` c2 ON c2.parentId = c1.id AND c2.name = 'Konserver & burkar' + JOIN `Category` c3 ON c3.parentId = c2.id AND c3.name = 'Fruktkonserver' + WHERE c1.name = 'Skafferi' AND c1.parentId IS NULL +) WHERE `name` IN ('Marmelad');