migrations/Version20260729190000.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.  * Affine la notion de « recherche sans résultat » sur l'outil SELECT.
  8.  *
  9.  * Une recherche n'est comptée comme sans résultat que si le questionnaire a été
  10.  * mené jusqu'au bout ET que des codes produits ont été trouvés dans
  11.  * catalogue_import, sans qu'aucun produit correspondant existe en base.
  12.  * `missing_references` consigne ces références pour permettre le diagnostic.
  13.  */
  14. final class Version20260729190000 extends AbstractMigration
  15. {
  16.     public function getDescription(): string
  17.     {
  18.         return 'select_search : complétude du parcours et références produits introuvables';
  19.     }
  20.     public function up(Schema $schema): void
  21.     {
  22.         $this->addSql('ALTER TABLE select_search ADD complete TINYINT(1) NOT NULL DEFAULT 0');
  23.         $this->addSql('ALTER TABLE select_search ADD catalogue_count INT NOT NULL DEFAULT 0');
  24.         // MySQL 5.7 n'accepte pas de DEFAULT sur une colonne JSON : on l'ajoute
  25.         // nullable, on remplit les lignes existantes, puis on la passe NOT NULL.
  26.         $this->addSql('ALTER TABLE select_search ADD missing_references JSON DEFAULT NULL');
  27.         $this->addSql("UPDATE select_search SET missing_references = '[]' WHERE missing_references IS NULL");
  28.         $this->addSql('ALTER TABLE select_search MODIFY missing_references JSON NOT NULL');
  29.         $this->addSql('CREATE INDEX idx_select_search_complete ON select_search (complete, catalogue_count, result_count)');
  30.         // Les recherches enregistrées avant ce changement l'ont été par du code qui
  31.         // ne traçait pas la complétude : on les marque abouties dès qu'elles ont
  32.         // affiché au moins un produit, faute de pouvoir la reconstituer autrement.
  33.         $this->addSql('UPDATE select_search SET complete = 1 WHERE result_count > 0');
  34.     }
  35.     public function down(Schema $schema): void
  36.     {
  37.         $this->addSql('DROP INDEX idx_select_search_complete ON select_search');
  38.         $this->addSql('ALTER TABLE select_search DROP missing_references');
  39.         $this->addSql('ALTER TABLE select_search DROP catalogue_count');
  40.         $this->addSql('ALTER TABLE select_search DROP complete');
  41.     }
  42. }