This commit is contained in:
2026-04-30 01:04:06 +02:00
parent 2903ea2517
commit 2639242ca6
21 changed files with 1989 additions and 116 deletions

View File

@@ -0,0 +1,127 @@
-- Migracja: rename kolumn products + nowe pola dla feedu XML + xml_feed_url w clients
-- Cel: rozdzielenie danych z feedu GMC (title_gmc, description_gmc) od edytowalnych/AI (title, description)
-- oraz dodanie obslugi feedu XML per klient (cron pobiera dane i wzbogaca products).
-- Zalozenia:
-- - Stare `products.name` (z Google Ads / Merchant) staje sie nowym `title` (glowna nazwa wyswietlana)
-- - Stare `products.title` (z GMC API) staje sie `title_gmc` (zrodlowa nazwa z feedu/Merchant)
-- - Nowe `description_gmc` przechowuje opis z feedu (oddzielnie od `description` edytowanego/AI)
-- - Nowe `price` przechowuje cene z feedu XML
-- - Nowe `clients.xml_feed_url` i `clients.xml_feed_last_sync_at` obsluguja import feedu
-- Idempotentnosc: kazdy ALTER chroniony EXISTS w INFORMATION_SCHEMA.
-- 1) products.title -> title_gmc (musi byc PIERWSZE, zanim title zwolni miejsce dla rename z name)
SET @sql = IF(
EXISTS (
SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'products'
AND COLUMN_NAME = 'title'
)
AND NOT EXISTS (
SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'products'
AND COLUMN_NAME = 'title_gmc'
),
'ALTER TABLE `products` CHANGE `title` `title_gmc` VARCHAR(255) NULL DEFAULT NULL',
'DO 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 2) products.name -> title (po zwolnieniu nazwy `title` przez krok 1)
SET @sql = IF(
EXISTS (
SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'products'
AND COLUMN_NAME = 'name'
)
AND NOT EXISTS (
SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'products'
AND COLUMN_NAME = 'title'
),
'ALTER TABLE `products` CHANGE `name` `title` VARCHAR(255) NULL DEFAULT NULL',
'DO 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 3) products.description_gmc (nowa kolumna na opis z feedu)
SET @sql = IF(
EXISTS (
SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'products'
AND COLUMN_NAME = 'description_gmc'
),
'DO 1',
'ALTER TABLE `products` ADD COLUMN `description_gmc` TEXT NULL DEFAULT NULL AFTER `description`'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 4) products.price (nowa kolumna na cene z feedu XML)
SET @sql = IF(
EXISTS (
SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'products'
AND COLUMN_NAME = 'price'
),
'DO 1',
'ALTER TABLE `products` ADD COLUMN `price` DECIMAL(10,2) NULL DEFAULT NULL AFTER `custom_label_1`'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 5) INDEX (client_id, offer_id) - przyspiesza lookup w XmlFeedImporter (NIE unique - mozliwe duplikaty offer_id w istniejacych danych)
SET @sql = IF(
EXISTS (
SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'products'
AND INDEX_NAME = 'idx_products_client_offer'
),
'DO 1',
'ALTER TABLE `products` ADD INDEX `idx_products_client_offer` (`client_id`, `offer_id`)'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 6) clients.xml_feed_url (URL feedu XML per klient)
SET @sql = IF(
EXISTS (
SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'clients'
AND COLUMN_NAME = 'xml_feed_url'
),
'DO 1',
'ALTER TABLE `clients` ADD COLUMN `xml_feed_url` VARCHAR(500) NULL DEFAULT NULL AFTER `google_merchant_account_id`'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 7) clients.xml_feed_last_sync_at (timestamp ostatniego importu feedu)
SET @sql = IF(
EXISTS (
SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'clients'
AND COLUMN_NAME = 'xml_feed_last_sync_at'
),
'DO 1',
'ALTER TABLE `clients` ADD COLUMN `xml_feed_last_sync_at` DATETIME NULL DEFAULT NULL AFTER `xml_feed_url`'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;