vendor/bluue/sites-bundle/migrations/Version20230824120520.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace SitesBundleMigrations;
  4. use Doctrine\DBAL\Schema\Schema;
  5. use Symfony\Component\Uid\UuidV6;
  6. use Doctrine\Migrations\AbstractMigration;
  7. final class Version20230824120520 extends AbstractMigration
  8. {
  9.     public function up(Schema $schema): void
  10.     {
  11.         $this->addSql('CREATE TABLE sites_bundle__note_type (id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', created_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', updated_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', deleted_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', name VARCHAR(255) NOT NULL, number VARCHAR(32) NOT NULL, color VARCHAR(7) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME DEFAULT NULL, UNIQUE INDEX UNIQ_1C47A68D96901F54 (number), INDEX IDX_1C47A68DB03A8386 (created_by_id), INDEX IDX_1C47A68D896DBBDE (updated_by_id), INDEX IDX_1C47A68DC76F1F52 (deleted_by_id), INDEX name (name), INDEX number (number), INDEX color (color), INDEX deleted_at (deleted_at), INDEX created_at (created_at), INDEX updated_at (updated_at), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
  12.         $this->addSql('CREATE TABLE sites_bundle__note_type_translations (id INT AUTO_INCREMENT NOT NULL, object_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', locale VARCHAR(8) NOT NULL, field VARCHAR(32) NOT NULL, content LONGTEXT DEFAULT NULL, INDEX IDX_2E8081B5232D562B (object_id), FULLTEXT INDEX content (content), UNIQUE INDEX lookup_unique_idx (locale, object_id, field), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
  13.         $this->addSql('CREATE TABLE sites_bundle__site (id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', customer_id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', created_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', updated_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', deleted_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', name VARCHAR(255) NOT NULL, internal_note LONGTEXT DEFAULT NULL, git_link VARCHAR(255) DEFAULT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME DEFAULT NULL, INDEX IDX_40572FA39395C3F3 (customer_id), INDEX IDX_40572FA3B03A8386 (created_by_id), INDEX IDX_40572FA3896DBBDE (updated_by_id), INDEX IDX_40572FA3C76F1F52 (deleted_by_id), INDEX name (name), INDEX deleted_at (deleted_at), INDEX created_at (created_at), INDEX updated_at (updated_at), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
  14.         $this->addSql('CREATE TABLE sites_bundle__site_note (id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', site_id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', note_type_id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', created_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', updated_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', deleted_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', name VARCHAR(128) NOT NULL, content LONGTEXT DEFAULT NULL, position INT NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME DEFAULT NULL, INDEX IDX_C4C4A711F6BD1646 (site_id), INDEX IDX_C4C4A71144EA4809 (note_type_id), INDEX IDX_C4C4A711B03A8386 (created_by_id), INDEX IDX_C4C4A711896DBBDE (updated_by_id), INDEX IDX_C4C4A711C76F1F52 (deleted_by_id), INDEX name (name), INDEX deleted_at (deleted_at), INDEX created_at (created_at), INDEX updated_at (updated_at), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
  15.         $this->addSql('ALTER TABLE sites_bundle__note_type ADD CONSTRAINT FK_1C47A68DB03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id)');
  16.         $this->addSql('ALTER TABLE sites_bundle__note_type ADD CONSTRAINT FK_1C47A68D896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id)');
  17.         $this->addSql('ALTER TABLE sites_bundle__note_type ADD CONSTRAINT FK_1C47A68DC76F1F52 FOREIGN KEY (deleted_by_id) REFERENCES user (id)');
  18.         $this->addSql('ALTER TABLE sites_bundle__note_type_translations ADD CONSTRAINT FK_2E8081B5232D562B FOREIGN KEY (object_id) REFERENCES sites_bundle__note_type (id) ON DELETE CASCADE');
  19.         $this->addSql('ALTER TABLE sites_bundle__site ADD CONSTRAINT FK_40572FA39395C3F3 FOREIGN KEY (customer_id) REFERENCES customers_bundle__customer (id)');
  20.         $this->addSql('ALTER TABLE sites_bundle__site ADD CONSTRAINT FK_40572FA3B03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id)');
  21.         $this->addSql('ALTER TABLE sites_bundle__site ADD CONSTRAINT FK_40572FA3896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id)');
  22.         $this->addSql('ALTER TABLE sites_bundle__site ADD CONSTRAINT FK_40572FA3C76F1F52 FOREIGN KEY (deleted_by_id) REFERENCES user (id)');
  23.         $this->addSql('ALTER TABLE sites_bundle__site_note ADD CONSTRAINT FK_C4C4A711F6BD1646 FOREIGN KEY (site_id) REFERENCES sites_bundle__site (id)');
  24.         $this->addSql('ALTER TABLE sites_bundle__site_note ADD CONSTRAINT FK_C4C4A71144EA4809 FOREIGN KEY (note_type_id) REFERENCES sites_bundle__note_type (id)');
  25.         $this->addSql('ALTER TABLE sites_bundle__site_note ADD CONSTRAINT FK_C4C4A711B03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id)');
  26.         $this->addSql('ALTER TABLE sites_bundle__site_note ADD CONSTRAINT FK_C4C4A711896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id)');
  27.         $this->addSql('ALTER TABLE sites_bundle__site_note ADD CONSTRAINT FK_C4C4A711C76F1F52 FOREIGN KEY (deleted_by_id) REFERENCES user (id)');
  28.     }
  29.     public function down(Schema $schema): void
  30.     {
  31.         $this->addSql('ALTER TABLE projects_bundle__project DROP FOREIGN KEY FK_9317E9CF6BD1646');
  32.         $this->addSql('ALTER TABLE sites_bundle__note_type DROP FOREIGN KEY FK_1C47A68DB03A8386');
  33.         $this->addSql('ALTER TABLE sites_bundle__note_type DROP FOREIGN KEY FK_1C47A68D896DBBDE');
  34.         $this->addSql('ALTER TABLE sites_bundle__note_type DROP FOREIGN KEY FK_1C47A68DC76F1F52');
  35.         $this->addSql('ALTER TABLE sites_bundle__note_type_translations DROP FOREIGN KEY FK_2E8081B5232D562B');
  36.         $this->addSql('ALTER TABLE sites_bundle__site DROP FOREIGN KEY FK_40572FA39395C3F3');
  37.         $this->addSql('ALTER TABLE sites_bundle__site DROP FOREIGN KEY FK_40572FA3B03A8386');
  38.         $this->addSql('ALTER TABLE sites_bundle__site DROP FOREIGN KEY FK_40572FA3896DBBDE');
  39.         $this->addSql('ALTER TABLE sites_bundle__site DROP FOREIGN KEY FK_40572FA3C76F1F52');
  40.         $this->addSql('ALTER TABLE sites_bundle__site_note DROP FOREIGN KEY FK_C4C4A711F6BD1646');
  41.         $this->addSql('ALTER TABLE sites_bundle__site_note DROP FOREIGN KEY FK_C4C4A71144EA4809');
  42.         $this->addSql('ALTER TABLE sites_bundle__site_note DROP FOREIGN KEY FK_C4C4A711B03A8386');
  43.         $this->addSql('ALTER TABLE sites_bundle__site_note DROP FOREIGN KEY FK_C4C4A711896DBBDE');
  44.         $this->addSql('ALTER TABLE sites_bundle__site_note DROP FOREIGN KEY FK_C4C4A711C76F1F52');
  45.         $this->addSql('DROP TABLE sites_bundle__note_type');
  46.         $this->addSql('DROP TABLE sites_bundle__note_type_translations');
  47.         $this->addSql('DROP TABLE sites_bundle__site');
  48.         $this->addSql('DROP TABLE sites_bundle__site_note');
  49.     }
  50.     public function postUp(Schema $schema): void
  51.     {
  52.         parent::postUp($schema);
  53.         $now = (new \DateTime())->format('Y-m-d H:i:s');
  54.         $languages $this->connection->executeQuery('SELECT * FROM language WHERE deleted_at IS NULL')
  55.             ->fetchAllAssociative();
  56.         $rootLocale 'en';
  57.         $defaultLocale $this->connection
  58.             ->executeQuery('SELECT locale FROM language WHERE deleted_at IS NULL AND is_default = 1')
  59.             ->fetchOne() ?: 'en';
  60.         $noteTypes = [
  61.             [
  62.                 'names' => ['fr' => 'PROD''en' => 'PROD'],
  63.                 'color' => '#f6b3b3',
  64.                 'number' => '1'
  65.             ],
  66.             [
  67.                 'names' => ['fr' => 'DÉMO''en' => 'DEMO'],
  68.                 'color' => '#fcc766',
  69.                 'number' => '2'
  70.             ],
  71.             [
  72.                 'names' => ['fr' => 'DEV''en' => 'DEV'],
  73.                 'color' => '#b3f6b3',
  74.                 'number' => '3'
  75.             ],
  76.             [
  77.                 'names' => ['fr' => 'AUTRES''en' => 'OTHERS'],
  78.                 'color' => '#edf1f2',
  79.                 'number' => '4'
  80.             ]
  81.         ];
  82.         foreach ($noteTypes as $noteType) {
  83.             $noteTypeId = (new UuidV6())->toBinary();
  84.             $this->connection->insert('sites_bundle__note_type', [
  85.                 'id' => $noteTypeId,
  86.                 'name' => !empty($noteType['names'][$defaultLocale]) ?
  87.                     $noteType['names'][$defaultLocale] : $noteType['names'][$rootLocale],
  88.                 'color' => $noteType['color'],
  89.                 'number' => $noteType['number'],
  90.                 'created_at' => $now,
  91.                 'updated_at' => $now
  92.             ]);
  93.             foreach ($languages as $language) {
  94.                 $localeTo $rootLocale;
  95.                 if (!empty($noteType['names'][$language['locale']])) {
  96.                     $localeTo $language['locale'];
  97.                 } elseif (!empty($noteType['names'][$defaultLocale])) {
  98.                     $localeTo $defaultLocale;
  99.                 }
  100.                 $this->connection->insert('sites_bundle__note_type_translations', [
  101.                     'object_id' => $noteTypeId,
  102.                     'locale' => $language['locale'],
  103.                     'field' => 'name',
  104.                     'content' => $noteType['names'][$localeTo]
  105.                 ]);
  106.             }
  107.         }
  108.     }
  109. }