29 lines
1.5 KiB
SQL
29 lines
1.5 KiB
SQL
-- Phase 75: Separate pull status mappings table
|
|
-- Pull direction (shopPRO → orderPRO) needs its own table with UNIQUE on shoppro_status_code
|
|
-- because push direction allows many orderPRO statuses → one shopPRO status
|
|
|
|
CREATE TABLE IF NOT EXISTS order_status_pull_mappings (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
integration_id INT NOT NULL,
|
|
shoppro_status_code VARCHAR(100) NOT NULL,
|
|
shoppro_status_name VARCHAR(255) DEFAULT NULL,
|
|
orderpro_status_code VARCHAR(100) NOT NULL,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
UNIQUE INDEX order_status_pull_mappings_integration_shoppro_unique (integration_id, shoppro_status_code),
|
|
INDEX order_status_pull_mappings_integration_idx (integration_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- Pre-populate from existing push mappings: for each (integration_id, shoppro_status_code)
|
|
-- take the row with the highest id (most recently created)
|
|
INSERT IGNORE INTO order_status_pull_mappings (integration_id, shoppro_status_code, shoppro_status_name, orderpro_status_code)
|
|
SELECT osm.integration_id, osm.shoppro_status_code, osm.shoppro_status_name, osm.orderpro_status_code
|
|
FROM order_status_mappings osm
|
|
INNER JOIN (
|
|
SELECT integration_id, shoppro_status_code, MAX(id) AS max_id
|
|
FROM order_status_mappings
|
|
WHERE shoppro_status_code <> ''
|
|
GROUP BY integration_id, shoppro_status_code
|
|
) latest ON osm.id = latest.max_id
|
|
WHERE osm.shoppro_status_code <> '';
|