|
| 1 | +<?php |
| 2 | + |
| 3 | +declare(strict_types=1); |
| 4 | + |
| 5 | +namespace Shopsys\FrameworkBundle\Migrations; |
| 6 | + |
| 7 | +use Doctrine\DBAL\Schema\Schema; |
| 8 | +use Override; |
| 9 | +use Shopsys\MigrationBundle\Component\Doctrine\Migrations\AbstractMigration; |
| 10 | + |
| 11 | +final class Version20260608120000 extends AbstractMigration |
| 12 | +{ |
| 13 | + #[Override] |
| 14 | + public function up(Schema $schema): void |
| 15 | + { |
| 16 | + $this->sql('ALTER TABLE order_statuses ADD code VARCHAR(255) DEFAULT NULL'); |
| 17 | + $this->sql('UPDATE order_statuses SET code = \'new\' WHERE id = 1'); |
| 18 | + $this->sql('UPDATE order_statuses SET code = \'in-progress\' WHERE id = 2'); |
| 19 | + $this->sql('UPDATE order_statuses SET code = \'done\' WHERE id = 3'); |
| 20 | + $this->sql('UPDATE order_statuses SET code = \'canceled\' WHERE id = 4'); |
| 21 | + $this->sql('UPDATE order_statuses SET code = \'withdrawn\' WHERE type = \'withdrawn\''); |
| 22 | + $this->sql(' |
| 23 | + WITH generated_codes AS ( |
| 24 | + SELECT |
| 25 | + os.id, |
| 26 | + COALESCE( |
| 27 | + NULLIF(TRIM(BOTH \'-\' FROM REGEXP_REPLACE(LOWER(ost.name), \'[^a-z0-9]+\', \'-\', \'g\')), \'\'), |
| 28 | + CONCAT(\'order-status-\', os.id) |
| 29 | + ) AS base_code |
| 30 | + FROM order_statuses os |
| 31 | + JOIN order_status_translations ost ON ost.id = ( |
| 32 | + SELECT MIN(ost2.id) |
| 33 | + FROM order_status_translations ost2 |
| 34 | + WHERE ost2.translatable_id = os.id |
| 35 | + ) |
| 36 | + WHERE os.code IS NULL |
| 37 | + ), |
| 38 | + unique_codes AS ( |
| 39 | + SELECT |
| 40 | + id, |
| 41 | + CASE |
| 42 | + WHEN ROW_NUMBER() OVER (PARTITION BY base_code ORDER BY id) = 1 THEN base_code |
| 43 | + ELSE CONCAT(base_code, \'-\', ROW_NUMBER() OVER (PARTITION BY base_code ORDER BY id)) |
| 44 | + END AS code |
| 45 | + FROM generated_codes |
| 46 | + ) |
| 47 | + UPDATE order_statuses os |
| 48 | + SET code = unique_codes.code |
| 49 | + FROM unique_codes |
| 50 | + WHERE unique_codes.id = os.id |
| 51 | + '); |
| 52 | + $this->sql('UPDATE order_statuses SET code = CONCAT(\'order-status-\', id) WHERE code IS NULL OR code = \'\''); |
| 53 | + $this->sql('ALTER TABLE order_statuses ALTER code SET NOT NULL'); |
| 54 | + $this->sql('CREATE UNIQUE INDEX UNIQ_AA08FCA077153098 ON order_statuses (code)'); |
| 55 | + |
| 56 | + $this->sql('ALTER TABLE complaint_statuses ADD code VARCHAR(255) DEFAULT NULL'); |
| 57 | + $this->sql('UPDATE complaint_statuses SET code = \'new\' WHERE id = 1'); |
| 58 | + $this->sql('UPDATE complaint_statuses SET code = \'resolved\' WHERE id = 2'); |
| 59 | + $this->sql('UPDATE complaint_statuses SET code = \'in-progress\' WHERE id = 3'); |
| 60 | + $this->sql(' |
| 61 | + WITH generated_codes AS ( |
| 62 | + SELECT |
| 63 | + cs.id, |
| 64 | + COALESCE( |
| 65 | + NULLIF(TRIM(BOTH \'-\' FROM REGEXP_REPLACE(LOWER(cst.name), \'[^a-z0-9]+\', \'-\', \'g\')), \'\'), |
| 66 | + CONCAT(\'complaint-status-\', cs.id) |
| 67 | + ) AS base_code |
| 68 | + FROM complaint_statuses cs |
| 69 | + JOIN complaint_status_translations cst ON cst.id = ( |
| 70 | + SELECT MIN(cst2.id) |
| 71 | + FROM complaint_status_translations cst2 |
| 72 | + WHERE cst2.translatable_id = cs.id |
| 73 | + ) |
| 74 | + WHERE cs.code IS NULL |
| 75 | + ), |
| 76 | + unique_codes AS ( |
| 77 | + SELECT |
| 78 | + id, |
| 79 | + CASE |
| 80 | + WHEN ROW_NUMBER() OVER (PARTITION BY base_code ORDER BY id) = 1 THEN base_code |
| 81 | + ELSE CONCAT(base_code, \'-\', ROW_NUMBER() OVER (PARTITION BY base_code ORDER BY id)) |
| 82 | + END AS code |
| 83 | + FROM generated_codes |
| 84 | + ) |
| 85 | + UPDATE complaint_statuses cs |
| 86 | + SET code = unique_codes.code |
| 87 | + FROM unique_codes |
| 88 | + WHERE unique_codes.id = cs.id |
| 89 | + '); |
| 90 | + $this->sql('UPDATE complaint_statuses SET code = CONCAT(\'complaint-status-\', id) WHERE code IS NULL OR code = \'\''); |
| 91 | + $this->sql('ALTER TABLE complaint_statuses ALTER code SET NOT NULL'); |
| 92 | + $this->sql('CREATE UNIQUE INDEX UNIQ_57E9379377153098 ON complaint_statuses (code)'); |
| 93 | + } |
| 94 | +} |
0 commit comments