update
This commit is contained in:
127
migrations/029_products_rename_columns_and_xml_feed.sql
Normal file
127
migrations/029_products_rename_columns_and_xml_feed.sql
Normal 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;
|
||||
Reference in New Issue
Block a user