migrations/Version20260729180000.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. /**
  7.  * Indicateurs d'usage de l'outil SELECT : sessions, recherches, recommandations.
  8.  */
  9. final class Version20260729180000 extends AbstractMigration
  10. {
  11.     public function getDescription(): string
  12.     {
  13.         return 'Tables de suivi SELECT (sessions, recherches, recommandations)';
  14.     }
  15.     public function up(Schema $schema): void
  16.     {
  17.         $this->addSql('
  18.             CREATE TABLE select_session (
  19.                 id INT AUTO_INCREMENT NOT NULL,
  20.                 user_id INT DEFAULT NULL,
  21.                 session_key VARCHAR(64) NOT NULL,
  22.                 email VARCHAR(255) NOT NULL,
  23.                 host VARCHAR(100) NOT NULL,
  24.                 device_type VARCHAR(20) NOT NULL,
  25.                 user_agent LONGTEXT DEFAULT NULL,
  26.                 started_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\',
  27.                 last_seen_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\',
  28.                 search_count INT NOT NULL,
  29.                 INDEX idx_select_session_email (email),
  30.                 INDEX idx_select_session_started (started_at),
  31.                 INDEX IDX_SELECT_SESSION_USER (user_id),
  32.                 PRIMARY KEY(id)
  33.             ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB
  34.         ');
  35.         $this->addSql('
  36.             CREATE TABLE select_search (
  37.                 id INT AUTO_INCREMENT NOT NULL,
  38.                 session_id INT NOT NULL,
  39.                 created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\',
  40.                 answers JSON NOT NULL,
  41.                 path_label VARCHAR(500) NOT NULL,
  42.                 result_count INT NOT NULL,
  43.                 feedback SMALLINT DEFAULT NULL,
  44.                 feedback_at DATETIME DEFAULT NULL COMMENT \'(DC2Type:datetime_immutable)\',
  45.                 INDEX idx_select_search_created (created_at),
  46.                 INDEX idx_select_search_results (result_count),
  47.                 INDEX IDX_SELECT_SEARCH_SESSION (session_id),
  48.                 PRIMARY KEY(id)
  49.             ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB
  50.         ');
  51.         $this->addSql('
  52.             CREATE TABLE select_recommendation (
  53.                 id INT AUTO_INCREMENT NOT NULL,
  54.                 search_id INT NOT NULL,
  55.                 product_slug VARCHAR(255) NOT NULL,
  56.                 product_name VARCHAR(255) DEFAULT NULL,
  57.                 kind VARCHAR(20) NOT NULL,
  58.                 detail_clicks INT NOT NULL,
  59.                 INDEX idx_select_reco_slug (product_slug),
  60.                 INDEX IDX_SELECT_RECO_SEARCH (search_id),
  61.                 PRIMARY KEY(id)
  62.             ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB
  63.         ');
  64.         $this->addSql('ALTER TABLE select_session ADD CONSTRAINT FK_SELECT_SESSION_USER FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE SET NULL');
  65.         $this->addSql('ALTER TABLE select_search ADD CONSTRAINT FK_SELECT_SEARCH_SESSION FOREIGN KEY (session_id) REFERENCES select_session (id) ON DELETE CASCADE');
  66.         $this->addSql('ALTER TABLE select_recommendation ADD CONSTRAINT FK_SELECT_RECO_SEARCH FOREIGN KEY (search_id) REFERENCES select_search (id) ON DELETE CASCADE');
  67.     }
  68.     public function down(Schema $schema): void
  69.     {
  70.         $this->addSql('ALTER TABLE select_recommendation DROP FOREIGN KEY FK_SELECT_RECO_SEARCH');
  71.         $this->addSql('ALTER TABLE select_search DROP FOREIGN KEY FK_SELECT_SEARCH_SESSION');
  72.         $this->addSql('ALTER TABLE select_session DROP FOREIGN KEY FK_SELECT_SESSION_USER');
  73.         $this->addSql('DROP TABLE select_recommendation');
  74.         $this->addSql('DROP TABLE select_search');
  75.         $this->addSql('DROP TABLE select_session');
  76.     }
  77. }