<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Affine la notion de « recherche sans résultat » sur l'outil SELECT.
*
* Une recherche n'est comptée comme sans résultat que si le questionnaire a été
* mené jusqu'au bout ET que des codes produits ont été trouvés dans
* catalogue_import, sans qu'aucun produit correspondant existe en base.
* `missing_references` consigne ces références pour permettre le diagnostic.
*/
final class Version20260729190000 extends AbstractMigration
{
public function getDescription(): string
{
return 'select_search : complétude du parcours et références produits introuvables';
}
public function up(Schema $schema): void
{
$this->addSql('ALTER TABLE select_search ADD complete TINYINT(1) NOT NULL DEFAULT 0');
$this->addSql('ALTER TABLE select_search ADD catalogue_count INT NOT NULL DEFAULT 0');
// MySQL 5.7 n'accepte pas de DEFAULT sur une colonne JSON : on l'ajoute
// nullable, on remplit les lignes existantes, puis on la passe NOT NULL.
$this->addSql('ALTER TABLE select_search ADD missing_references JSON DEFAULT NULL');
$this->addSql("UPDATE select_search SET missing_references = '[]' WHERE missing_references IS NULL");
$this->addSql('ALTER TABLE select_search MODIFY missing_references JSON NOT NULL');
$this->addSql('CREATE INDEX idx_select_search_complete ON select_search (complete, catalogue_count, result_count)');
// Les recherches enregistrées avant ce changement l'ont été par du code qui
// ne traçait pas la complétude : on les marque abouties dès qu'elles ont
// affiché au moins un produit, faute de pouvoir la reconstituer autrement.
$this->addSql('UPDATE select_search SET complete = 1 WHERE result_count > 0');
}
public function down(Schema $schema): void
{
$this->addSql('DROP INDEX idx_select_search_complete ON select_search');
$this->addSql('ALTER TABLE select_search DROP missing_references');
$this->addSql('ALTER TABLE select_search DROP catalogue_count');
$this->addSql('ALTER TABLE select_search DROP complete');
}
}