feat(seed-script): enhance category mapping with dynamic subcategory checks

This commit is contained in:
Nils-Johan Gynther
2026-05-03 12:44:51 +02:00
parent 00ec332136
commit 98e065a3e2
+49 -20
View File
@@ -527,40 +527,69 @@ INSERT INTO `Category` (`name`, `parentId`)
-- Obs: Vi sätter bara categoryId där den fortfarande är NULL. -- Obs: Vi sätter bara categoryId där den fortfarande är NULL.
-- ============================================================ -- ============================================================
SET @has_subcategory := (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'Product'
AND COLUMN_NAME = 'subcategory'
);
-- 1) category (nivå 2) + subcategory (nivå 3) -- 1) category (nivå 2) + subcategory (nivå 3)
UPDATE `Product` p SET @sql := IF(
JOIN `Category` c1 ON c1.parentId IS NULL @has_subcategory > 0,
JOIN `Category` c2 ON c2.parentId = c1.id 'UPDATE `Product` p
JOIN `Category` c3 ON c3.parentId = c2.id JOIN `Category` c1 ON c1.parentId IS NULL
SET p.`categoryId` = c3.id JOIN `Category` c2 ON c2.parentId = c1.id
WHERE p.`categoryId` IS NULL JOIN `Category` c3 ON c3.parentId = c2.id
SET p.`categoryId` = c3.id
WHERE p.`categoryId` IS NULL
AND p.`category` IS NOT NULL AND p.`category` IS NOT NULL
AND p.`subcategory` IS NOT NULL AND p.`subcategory` IS NOT NULL
AND LOWER(TRIM(p.`category`)) = LOWER(TRIM(c2.`name`)) AND LOWER(TRIM(p.`category`)) = LOWER(TRIM(c2.`name`))
AND LOWER(TRIM(p.`subcategory`)) = LOWER(TRIM(c3.`name`)); AND LOWER(TRIM(p.`subcategory`)) = LOWER(TRIM(c3.`name`))',
'SELECT ''Skipping subcategory remap step 1: Product.subcategory missing'' AS info'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 2) category (nivå 1) + subcategory (nivå 3) -- 2) category (nivå 1) + subcategory (nivå 3)
UPDATE `Product` p SET @sql := IF(
JOIN `Category` c1 ON c1.parentId IS NULL @has_subcategory > 0,
JOIN `Category` c2 ON c2.parentId = c1.id 'UPDATE `Product` p
JOIN `Category` c3 ON c3.parentId = c2.id JOIN `Category` c1 ON c1.parentId IS NULL
SET p.`categoryId` = c3.id JOIN `Category` c2 ON c2.parentId = c1.id
WHERE p.`categoryId` IS NULL JOIN `Category` c3 ON c3.parentId = c2.id
SET p.`categoryId` = c3.id
WHERE p.`categoryId` IS NULL
AND p.`category` IS NOT NULL AND p.`category` IS NOT NULL
AND p.`subcategory` IS NOT NULL AND p.`subcategory` IS NOT NULL
AND LOWER(TRIM(p.`category`)) = LOWER(TRIM(c1.`name`)) AND LOWER(TRIM(p.`category`)) = LOWER(TRIM(c1.`name`))
AND LOWER(TRIM(p.`subcategory`)) = LOWER(TRIM(c3.`name`)); AND LOWER(TRIM(p.`subcategory`)) = LOWER(TRIM(c3.`name`))',
'SELECT ''Skipping subcategory remap step 2: Product.subcategory missing'' AS info'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 3) category (nivå 1) + subcategory (nivå 2) -- 3) category (nivå 1) + subcategory (nivå 2)
UPDATE `Product` p SET @sql := IF(
JOIN `Category` c1 ON c1.parentId IS NULL @has_subcategory > 0,
JOIN `Category` c2 ON c2.parentId = c1.id 'UPDATE `Product` p
SET p.`categoryId` = c2.id JOIN `Category` c1 ON c1.parentId IS NULL
WHERE p.`categoryId` IS NULL JOIN `Category` c2 ON c2.parentId = c1.id
SET p.`categoryId` = c2.id
WHERE p.`categoryId` IS NULL
AND p.`category` IS NOT NULL AND p.`category` IS NOT NULL
AND p.`subcategory` IS NOT NULL AND p.`subcategory` IS NOT NULL
AND LOWER(TRIM(p.`category`)) = LOWER(TRIM(c1.`name`)) AND LOWER(TRIM(p.`category`)) = LOWER(TRIM(c1.`name`))
AND LOWER(TRIM(p.`subcategory`)) = LOWER(TRIM(c2.`name`)); AND LOWER(TRIM(p.`subcategory`)) = LOWER(TRIM(c2.`name`))',
'SELECT ''Skipping subcategory remap step 3: Product.subcategory missing'' AS info'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 4) fallback: category (nivå 1) -- 4) fallback: category (nivå 1)
UPDATE `Product` p UPDATE `Product` p