<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Classements multiples (PROJ-2026-005 #17) — backfill :
* copie chaque affectation legacy (user.segmentation_id) dans la table pivot user_segmentation,
* afin que le pivot soit la source de vérité complète dès sa création.
* Idempotente (NOT EXISTS) et réversible (le down ne supprime que les lignes miroir).
*/
final class Version20260819104525 extends AbstractMigration
{
public function getDescription(): string
{
return 'Classements multiples : backfill des segmentations legacy dans user_segmentation';
}
public function up(Schema $schema): void
{
$this->addSql('INSERT INTO user_segmentation (user_id, segmentation_id, created_at, updated_at)
SELECT u.id, u.segmentation_id, NOW(), NOW()
FROM `user` u
WHERE u.segmentation_id IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM user_segmentation us
WHERE us.user_id = u.id AND us.segmentation_id = u.segmentation_id
)');
}
public function down(Schema $schema): void
{
$this->addSql('DELETE us FROM user_segmentation us
INNER JOIN `user` u ON u.id = us.user_id AND u.segmentation_id = us.segmentation_id');
}
}