migrations/Version20251123135707.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations;
  4. use Doctrine\DBAL\Schema\Schema;
  5. use Doctrine\Migrations\AbstractMigration;
  6. final class Version20251123135707 extends AbstractMigration
  7. {
  8.     public function getDescription(): string
  9.     {
  10.         return 'Create gamification tables: mission, mission_level, mission_history';
  11.     }
  12.     public function up(Schema $schema): void
  13.     {
  14.         // Create mybiz_mission table
  15.         $this->addSql('CREATE TABLE mybiz_mission (
  16.             id INT AUTO_INCREMENT NOT NULL,
  17.             name VARCHAR(255) NOT NULL,
  18.             marketing_name VARCHAR(255) NOT NULL,
  19.             recurrence VARCHAR(255) NOT NULL,
  20.             is_enabled TINYINT(1) NOT NULL DEFAULT 1,
  21.             category VARCHAR(255) DEFAULT NULL,
  22.             PRIMARY KEY(id)
  23.         ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
  24.         // Create mybiz_mission_level table
  25.         $this->addSql('CREATE TABLE mybiz_mission_level (
  26.             id INT AUTO_INCREMENT NOT NULL,
  27.             badge_name VARCHAR(255) DEFAULT NULL,
  28.             badge_marketing_name VARCHAR(255) DEFAULT NULL,
  29.             badge_image VARCHAR(255) DEFAULT NULL,
  30.             threshold INT NOT NULL,
  31.             xp INT NOT NULL,
  32.             level_number INT NOT NULL,
  33.             mission_id INT NOT NULL,
  34.             INDEX IDX_MISSION_LEVEL_MISSION (mission_id),
  35.             PRIMARY KEY(id)
  36.         ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
  37.         // Create mybiz_mission_history table
  38.         $this->addSql('CREATE TABLE mybiz_mission_history (
  39.             id INT AUTO_INCREMENT NOT NULL,
  40.             member_id INT NOT NULL,
  41.             mission_id INT NOT NULL,
  42.             mission_level_id INT DEFAULT NULL,
  43.             xp INT NOT NULL,
  44.             created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\',
  45.             updated_at DATETIME DEFAULT NULL COMMENT \'(DC2Type:datetime_immutable)\',
  46.             is_deprecated TINYINT(1) NOT NULL DEFAULT 0,
  47.             INDEX IDX_MISSION_HISTORY_MEMBER (member_id),
  48.             INDEX IDX_MISSION_HISTORY_MISSION (mission_id),
  49.             INDEX IDX_MISSION_HISTORY_MISSION_LEVEL (mission_level_id),
  50.             PRIMARY KEY(id)
  51.         ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
  52.         // Add foreign key constraints
  53.         $this->addSql('ALTER TABLE mybiz_mission_level ADD CONSTRAINT FK_MISSION_LEVEL_MISSION FOREIGN KEY (mission_id) REFERENCES mybiz_mission (id)');
  54.         $this->addSql('ALTER TABLE mybiz_mission_history ADD CONSTRAINT FK_MISSION_HISTORY_MEMBER FOREIGN KEY (member_id) REFERENCES app_member (id)');
  55.         $this->addSql('ALTER TABLE mybiz_mission_history ADD CONSTRAINT FK_MISSION_HISTORY_MISSION FOREIGN KEY (mission_id) REFERENCES mybiz_mission (id)');
  56.         $this->addSql('ALTER TABLE mybiz_mission_history ADD CONSTRAINT FK_MISSION_HISTORY_MISSION_LEVEL FOREIGN KEY (mission_level_id) REFERENCES mybiz_mission_level (id)');
  57.     }
  58.     public function down(Schema $schema): void
  59.     {
  60.         // Drop foreign key constraints first
  61.         $this->addSql('ALTER TABLE mybiz_mission_history DROP FOREIGN KEY FK_MISSION_HISTORY_MEMBER');
  62.         $this->addSql('ALTER TABLE mybiz_mission_history DROP FOREIGN KEY FK_MISSION_HISTORY_MISSION');
  63.         $this->addSql('ALTER TABLE mybiz_mission_history DROP FOREIGN KEY FK_MISSION_HISTORY_MISSION_LEVEL');
  64.         $this->addSql('ALTER TABLE mybiz_mission_level DROP FOREIGN KEY FK_MISSION_LEVEL_MISSION');
  65.         // Drop tables
  66.         $this->addSql('DROP TABLE mybiz_mission_history');
  67.         $this->addSql('DROP TABLE mybiz_mission_level');
  68.         $this->addSql('DROP TABLE mybiz_mission');
  69.     }
  70. }