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. }