migrations/Version20251119103818.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations;
  4. use Doctrine\DBAL\Exception;
  5. use Doctrine\DBAL\Schema\Schema;
  6. use Doctrine\Migrations\AbstractMigration;
  7. use Symfony\Component\Uid\Uuid;
  8. /**
  9.  * Auto-generated Migration: Please modify to your needs!
  10.  */
  11. final class Version20251119103818 extends AbstractMigration
  12. {
  13.     public function getDescription(): string
  14.     {
  15.         return '';
  16.     }
  17.     public function up(Schema $schema): void
  18.     {
  19.         // this up() migration is auto-generated, please modify it to your needs
  20.         $this->addSql('CREATE TABLE channel_company (id INT AUTO_INCREMENT NOT NULL, channel_id VARCHAR(36) NOT NULL, created_by_id VARCHAR(36) DEFAULT NULL, updated_by_id VARCHAR(36) DEFAULT NULL, name VARCHAR(255) NOT NULL, siret VARCHAR(14) DEFAULT NULL, representative_last_name VARCHAR(255) DEFAULT NULL, representative_first_name VARCHAR(255) DEFAULT NULL, email VARCHAR(255) DEFAULT NULL, phone VARCHAR(255) DEFAULT NULL, address LONGTEXT DEFAULT NULL, address_street VARCHAR(255) DEFAULT NULL, address_post_code VARCHAR(15) DEFAULT NULL, address_city VARCHAR(255) DEFAULT NULL, address_country VARCHAR(2) DEFAULT NULL, created_at DATETIME NOT NULL, updated_at DATETIME DEFAULT NULL, INDEX IDX_F8FC364E72F5A1AA (channel_id), INDEX IDX_F8FC364EB03A8386 (created_by_id), INDEX IDX_F8FC364E896DBBDE (updated_by_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
  21.         $this->addSql('CREATE TABLE channel_company_channel_user_data (id INT AUTO_INCREMENT NOT NULL, company_id INT NOT NULL, channel_user_data_id VARCHAR(36) NOT NULL, job VARCHAR(255) DEFAULT NULL, INDEX IDX_2A27B7A6979B1AD6 (company_id), INDEX IDX_2A27B7A623887597 (channel_user_data_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
  22.         $this->addSql('CREATE TABLE channel_user_data_cursus_internship (id INT AUTO_INCREMENT NOT NULL, cursus_id INT NOT NULL, company_id INT DEFAULT NULL, tutor_id VARCHAR(36) DEFAULT NULL, created_by_id VARCHAR(36) DEFAULT NULL, updated_by_id VARCHAR(36) DEFAULT NULL, start_at DATE NOT NULL, end_at DATE NOT NULL, duration INT DEFAULT NULL, internship_address LONGTEXT DEFAULT NULL, address_street VARCHAR(255) DEFAULT NULL, address_post_code VARCHAR(15) DEFAULT NULL, address_city VARCHAR(255) DEFAULT NULL, address_country VARCHAR(2) DEFAULT NULL, created_at DATETIME NOT NULL, updated_at DATETIME DEFAULT NULL, INDEX IDX_1398A1AD40AEF4B9 (cursus_id), INDEX IDX_1398A1AD979B1AD6 (company_id), INDEX IDX_1398A1AD208F64F1 (tutor_id), INDEX IDX_1398A1ADB03A8386 (created_by_id), INDEX IDX_1398A1AD896DBBDE (updated_by_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
  23.         $this->addSql('ALTER TABLE channel_company ADD CONSTRAINT FK_F8FC364E72F5A1AA FOREIGN KEY (channel_id) REFERENCES channel_channels (id) ON DELETE CASCADE');
  24.         $this->addSql('ALTER TABLE channel_company ADD CONSTRAINT FK_F8FC364EB03A8386 FOREIGN KEY (created_by_id) REFERENCES account_users (id) ON DELETE SET NULL');
  25.         $this->addSql('ALTER TABLE channel_company ADD CONSTRAINT FK_F8FC364E896DBBDE FOREIGN KEY (updated_by_id) REFERENCES account_users (id) ON DELETE SET NULL');
  26.         $this->addSql('ALTER TABLE channel_company_channel_user_data ADD CONSTRAINT FK_2A27B7A6979B1AD6 FOREIGN KEY (company_id) REFERENCES channel_company (id) ON DELETE CASCADE');
  27.         $this->addSql('ALTER TABLE channel_company_channel_user_data ADD CONSTRAINT FK_2A27B7A623887597 FOREIGN KEY (channel_user_data_id) REFERENCES channel_user_data (id) ON DELETE CASCADE');
  28.         $this->addSql('ALTER TABLE channel_user_data_cursus_internship ADD CONSTRAINT FK_1398A1AD40AEF4B9 FOREIGN KEY (cursus_id) REFERENCES channel_user_data_cursus (id) ON DELETE CASCADE');
  29.         $this->addSql('ALTER TABLE channel_user_data_cursus_internship ADD CONSTRAINT FK_1398A1AD979B1AD6 FOREIGN KEY (company_id) REFERENCES channel_company (id) ON DELETE SET NULL');
  30.         $this->addSql('ALTER TABLE channel_user_data_cursus_internship ADD CONSTRAINT FK_1398A1AD208F64F1 FOREIGN KEY (tutor_id) REFERENCES channel_user_data (id) ON DELETE SET NULL');
  31.         $this->addSql('ALTER TABLE channel_user_data_cursus_internship ADD CONSTRAINT FK_1398A1ADB03A8386 FOREIGN KEY (created_by_id) REFERENCES account_users (id) ON DELETE SET NULL');
  32.         $this->addSql('ALTER TABLE channel_user_data_cursus_internship ADD CONSTRAINT FK_1398A1AD896DBBDE FOREIGN KEY (updated_by_id) REFERENCES account_users (id) ON DELETE SET NULL');
  33.     }
  34.     public function down(Schema $schema): void
  35.     {
  36.         // this down() migration is auto-generated, please modify it to your needs
  37.         $this->addSql('ALTER TABLE channel_company DROP FOREIGN KEY FK_F8FC364E72F5A1AA');
  38.         $this->addSql('ALTER TABLE channel_company DROP FOREIGN KEY FK_F8FC364EB03A8386');
  39.         $this->addSql('ALTER TABLE channel_company DROP FOREIGN KEY FK_F8FC364E896DBBDE');
  40.         $this->addSql('ALTER TABLE channel_company_channel_user_data DROP FOREIGN KEY FK_2A27B7A6979B1AD6');
  41.         $this->addSql('ALTER TABLE channel_company_channel_user_data DROP FOREIGN KEY FK_2A27B7A623887597');
  42.         $this->addSql('ALTER TABLE channel_user_data_cursus_internship DROP FOREIGN KEY FK_1398A1AD40AEF4B9');
  43.         $this->addSql('ALTER TABLE channel_user_data_cursus_internship DROP FOREIGN KEY FK_1398A1AD979B1AD6');
  44.         $this->addSql('ALTER TABLE channel_user_data_cursus_internship DROP FOREIGN KEY FK_1398A1AD208F64F1');
  45.         $this->addSql('ALTER TABLE channel_user_data_cursus_internship DROP FOREIGN KEY FK_1398A1ADB03A8386');
  46.         $this->addSql('ALTER TABLE channel_user_data_cursus_internship DROP FOREIGN KEY FK_1398A1AD896DBBDE');
  47.         $this->addSql('DROP TABLE channel_company');
  48.         $this->addSql('DROP TABLE channel_company_channel_user_data');
  49.         $this->addSql('DROP TABLE channel_user_data_cursus_internship');
  50.     }
  51.     /**
  52.      * @throws \Throwable
  53.      * @throws Exception
  54.      */
  55.     public function postUp(Schema $schema): void
  56.     {
  57.         $this->connection->beginTransaction();
  58.         try {
  59.             $tutors $this->connection->fetchAllAssociative('
  60.                 SELECT t.email, t.first_name, t.last_name, cc.id AS channel_id
  61.                 FROM `channel_user_data_cursus_founder_tutor` t
  62.                 JOIN channel_user_data_cursus_company cudcc ON cudcc.id = t.company_id
  63.                 JOIN channel_user_data_cursus cudc ON cudc.id = cudcc.cursus_id
  64.                 JOIN channel_user_data cud ON cud.id = cudc.channel_user_data_id
  65.                 JOIN channel_channels cc ON cc.id = cud.channel_id
  66.                 WHERE t.email IS NOT NULL
  67.             ');
  68.             foreach ($tutors as $tutor) {
  69.                 $email $tutor['email'];
  70.                 $firstName $tutor['first_name'];
  71.                 $lastName $tutor['last_name'];
  72.                 $channelId $tutor['channel_id'];
  73.                 $existingUser $this->connection->fetchAssociative(
  74.                     'SELECT id FROM account_users WHERE email = :email',
  75.                     ['email' => $email]
  76.                 );
  77.                 if (!$existingUser) {
  78.                     $userId Uuid::v4()->toRfc4122();
  79.                     $this->connection->insert('account_users', [
  80.                         'id'          => $userId,
  81.                         'email'       => $email,
  82.                         'password'    => password_hash(bin2hex(random_bytes(6)), PASSWORD_BCRYPT),
  83.                         'enabled'     => 1,
  84.                         'is_verified' => 1,
  85.                         'first_name'  => $firstName,
  86.                         'last_name'   => $lastName,
  87.                         'roles'       => json_encode([]),
  88.                         'created_at'  => (new \DateTime())->format('Y-m-d H:i:s'),
  89.                     ]);
  90.                 }
  91.                 else {
  92.                     $userId $existingUser['id'];
  93.                 }
  94.                 $existingChannelUserData $this->connection->fetchAssociative(
  95.                     'SELECT id FROM channel_user_data WHERE user_id = :uid AND channel_id = :cid',
  96.                     [
  97.                         'uid' => $userId,
  98.                         'cid' => $channelId,
  99.                     ]
  100.                 );
  101.                 if (!$existingChannelUserData) {
  102.                     $channelUserDataId Uuid::v4()->toRfc4122();
  103.                     $this->connection->insert('channel_user_data', [
  104.                         'id'             => $channelUserDataId,
  105.                         'user_id'        => $userId,
  106.                         'channel_id'     => $channelId,
  107.                         'is_learner'     => 0,
  108.                     ]);
  109.                 }
  110.             }
  111.         } catch (\Throwable $e) {
  112.             $this->connection->rollBack();
  113.             throw $e;
  114.         }
  115.     }
  116. }