migrations/Version20260319110000.php line 1
<?phpdeclare(strict_types=1);namespace DoctrineMigrations;use Doctrine\DBAL\Schema\Schema;use Doctrine\Migrations\AbstractMigration;final class Version20260319110000 extends AbstractMigration{public function getDescription(): string{return 'Add survey templates, survey campaigns and student survey invitations';}public function up(Schema $schema): void{$this->abortIf(!$this->connection->getDatabasePlatform() instanceof \Doctrine\DBAL\Platforms\MySQL57Platform,"Migration can only be executed safely on '\Doctrine\DBAL\Platforms\MySQL57Platform'.");$this->addSql('CREATE TABLE survey_template (id INT AUTO_INCREMENT NOT NULL,center_id INT NOT NULL,modality_id INT DEFAULT NULL,name VARCHAR(255) NOT NULL,active TINYINT(1) DEFAULT 1 NOT NULL,disabled_reason VARCHAR(255) DEFAULT NULL,created_at DATETIME NOT NULL,updated_at DATETIME NOT NULL,INDEX IDX_SURVEY_TEMPLATE_CENTER (center_id),INDEX IDX_SURVEY_TEMPLATE_MODALITY (modality_id),PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');$this->addSql('CREATE TABLE survey_template_question (id INT AUTO_INCREMENT NOT NULL,template_id INT NOT NULL,position INT NOT NULL,label LONGTEXT NOT NULL,type VARCHAR(255) NOT NULL,options_text LONGTEXT DEFAULT NULL,INDEX IDX_SURVEY_TEMPLATE_QUESTION_TEMPLATE (template_id),PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');$this->addSql('CREATE TABLE survey_campaign (id INT AUTO_INCREMENT NOT NULL,center_id INT NOT NULL,event_id INT NOT NULL,template_id INT NOT NULL,created_by_id INT DEFAULT NULL,sent_by_id INT DEFAULT NULL,state VARCHAR(255) NOT NULL,close_date DATE DEFAULT NULL,created_at DATETIME NOT NULL,updated_at DATETIME NOT NULL,sent_at DATETIME DEFAULT NULL,UNIQUE INDEX UNIQ_SURVEY_CAMPAIGN_EVENT (event_id),INDEX IDX_SURVEY_CAMPAIGN_CENTER (center_id),INDEX IDX_SURVEY_CAMPAIGN_TEMPLATE (template_id),INDEX IDX_SURVEY_CAMPAIGN_CREATED_BY (created_by_id),INDEX IDX_SURVEY_CAMPAIGN_SENT_BY (sent_by_id),PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');$this->addSql('CREATE TABLE survey_campaign_question (id INT AUTO_INCREMENT NOT NULL,campaign_id INT NOT NULL,position INT NOT NULL,label LONGTEXT NOT NULL,type VARCHAR(255) NOT NULL,options_text LONGTEXT DEFAULT NULL,INDEX IDX_SURVEY_CAMPAIGN_QUESTION_CAMPAIGN (campaign_id),PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');$this->addSql('CREATE TABLE survey_invitation (id INT AUTO_INCREMENT NOT NULL,campaign_id INT NOT NULL,user_id INT NOT NULL,token VARCHAR(64) NOT NULL,created_at DATETIME NOT NULL,sent_at DATETIME DEFAULT NULL,opened_at DATETIME DEFAULT NULL,responded_at DATETIME DEFAULT NULL,UNIQUE INDEX UNIQ_SURVEY_INVITATION_TOKEN (token),UNIQUE INDEX UNIQ_SURVEY_INVITATION_CAMPAIGN_USER (campaign_id, user_id),INDEX IDX_SURVEY_INVITATION_USER (user_id),PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');$this->addSql('CREATE TABLE survey_invitation_answer (id INT AUTO_INCREMENT NOT NULL,invitation_id INT NOT NULL,question_id INT NOT NULL,answer_text LONGTEXT NOT NULL,UNIQUE INDEX UNIQ_SURVEY_INVITATION_ANSWER (invitation_id, question_id),INDEX IDX_SURVEY_INVITATION_ANSWER_QUESTION (question_id),PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');$this->addSql('ALTER TABLE survey_template ADD CONSTRAINT FK_SURVEY_TEMPLATE_CENTER FOREIGN KEY (center_id) REFERENCES centers (id)');$this->addSql('ALTER TABLE survey_template ADD CONSTRAINT FK_SURVEY_TEMPLATE_MODALITY FOREIGN KEY (modality_id) REFERENCES taxonomy_value (id) ON DELETE SET NULL');$this->addSql('ALTER TABLE survey_template_question ADD CONSTRAINT FK_SURVEY_TEMPLATE_QUESTION_TEMPLATE FOREIGN KEY (template_id) REFERENCES survey_template (id) ON DELETE CASCADE');$this->addSql('ALTER TABLE survey_campaign ADD CONSTRAINT FK_SURVEY_CAMPAIGN_CENTER FOREIGN KEY (center_id) REFERENCES centers (id)');$this->addSql('ALTER TABLE survey_campaign ADD CONSTRAINT FK_SURVEY_CAMPAIGN_EVENT FOREIGN KEY (event_id) REFERENCES events (id) ON DELETE CASCADE');$this->addSql('ALTER TABLE survey_campaign ADD CONSTRAINT FK_SURVEY_CAMPAIGN_TEMPLATE FOREIGN KEY (template_id) REFERENCES survey_template (id)');$this->addSql('ALTER TABLE survey_campaign ADD CONSTRAINT FK_SURVEY_CAMPAIGN_CREATED_BY FOREIGN KEY (created_by_id) REFERENCES user (id) ON DELETE SET NULL');$this->addSql('ALTER TABLE survey_campaign ADD CONSTRAINT FK_SURVEY_CAMPAIGN_SENT_BY FOREIGN KEY (sent_by_id) REFERENCES user (id) ON DELETE SET NULL');$this->addSql('ALTER TABLE survey_campaign_question ADD CONSTRAINT FK_SURVEY_CAMPAIGN_QUESTION_CAMPAIGN FOREIGN KEY (campaign_id) REFERENCES survey_campaign (id) ON DELETE CASCADE');$this->addSql('ALTER TABLE survey_invitation ADD CONSTRAINT FK_SURVEY_INVITATION_CAMPAIGN FOREIGN KEY (campaign_id) REFERENCES survey_campaign (id) ON DELETE CASCADE');$this->addSql('ALTER TABLE survey_invitation ADD CONSTRAINT FK_SURVEY_INVITATION_USER FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE');$this->addSql('ALTER TABLE survey_invitation_answer ADD CONSTRAINT FK_SURVEY_INVITATION_ANSWER_INVITATION FOREIGN KEY (invitation_id) REFERENCES survey_invitation (id) ON DELETE CASCADE');$this->addSql('ALTER TABLE survey_invitation_answer ADD CONSTRAINT FK_SURVEY_INVITATION_ANSWER_QUESTION FOREIGN KEY (question_id) REFERENCES survey_campaign_question (id) ON DELETE CASCADE');}public function down(Schema $schema): void{$this->abortIf(!$this->connection->getDatabasePlatform() instanceof \Doctrine\DBAL\Platforms\MySQL57Platform,"Migration can only be executed safely on '\Doctrine\DBAL\Platforms\MySQL57Platform'.");$this->addSql('ALTER TABLE survey_invitation_answer DROP FOREIGN KEY FK_SURVEY_INVITATION_ANSWER_INVITATION');$this->addSql('ALTER TABLE survey_invitation_answer DROP FOREIGN KEY FK_SURVEY_INVITATION_ANSWER_QUESTION');$this->addSql('ALTER TABLE survey_invitation DROP FOREIGN KEY FK_SURVEY_INVITATION_CAMPAIGN');$this->addSql('ALTER TABLE survey_invitation DROP FOREIGN KEY FK_SURVEY_INVITATION_USER');$this->addSql('ALTER TABLE survey_campaign_question DROP FOREIGN KEY FK_SURVEY_CAMPAIGN_QUESTION_CAMPAIGN');$this->addSql('ALTER TABLE survey_campaign DROP FOREIGN KEY FK_SURVEY_CAMPAIGN_CENTER');$this->addSql('ALTER TABLE survey_campaign DROP FOREIGN KEY FK_SURVEY_CAMPAIGN_EVENT');$this->addSql('ALTER TABLE survey_campaign DROP FOREIGN KEY FK_SURVEY_CAMPAIGN_TEMPLATE');$this->addSql('ALTER TABLE survey_campaign DROP FOREIGN KEY FK_SURVEY_CAMPAIGN_CREATED_BY');$this->addSql('ALTER TABLE survey_campaign DROP FOREIGN KEY FK_SURVEY_CAMPAIGN_SENT_BY');$this->addSql('ALTER TABLE survey_template_question DROP FOREIGN KEY FK_SURVEY_TEMPLATE_QUESTION_TEMPLATE');$this->addSql('ALTER TABLE survey_template DROP FOREIGN KEY FK_SURVEY_TEMPLATE_CENTER');$this->addSql('ALTER TABLE survey_template DROP FOREIGN KEY FK_SURVEY_TEMPLATE_MODALITY');$this->addSql('DROP TABLE survey_invitation_answer');$this->addSql('DROP TABLE survey_invitation');$this->addSql('DROP TABLE survey_campaign_question');$this->addSql('DROP TABLE survey_campaign');$this->addSql('DROP TABLE survey_template_question');$this->addSql('DROP TABLE survey_template');}}