diff --git a/src/Command/CleanDuplicateStatsCommand.php b/src/Command/CleanDuplicateStatsCommand.php
index 10522f95..bae9116c 100644
--- a/src/Command/CleanDuplicateStatsCommand.php
+++ b/src/Command/CleanDuplicateStatsCommand.php
@@ -47,6 +47,7 @@ class CleanDuplicateStatsCommand extends Command
}
$toDelete = [];
+ $toKeep = [];
foreach ($statsByZone as $zone => $statsList) {
if (count($statsList) > 1) {
// Trier par date_created (le plus ancien d'abord), puis par id si date absente
@@ -64,35 +65,48 @@ class CleanDuplicateStatsCommand extends Command
}
});
// Garder le premier, supprimer les autres
- $toDelete = array_merge($toDelete, array_slice($statsList, 1));
+ $toKeep[$zone] = $statsList[0];
+ $toDelete[$zone] = array_slice($statsList, 1);
}
}
- if (empty($toDelete)) {
+ $totalToDelete = array_sum(array_map('count', $toDelete));
+ if ($totalToDelete === 0) {
$io->success('Aucun doublon trouvé.');
return Command::SUCCESS;
}
- $io->warning(count($toDelete) . ' objet(s) Stats seraient supprimés.');
- foreach ($toDelete as $stat) {
- $io->text(sprintf('Zone: %s | ID: %d | Nom: %s | Créé: %s',
- $stat->getZone(),
- $stat->getId(),
- $stat->getName(),
- $stat->getDateCreated() ? $stat->getDateCreated()->format('Y-m-d H:i:s') : 'N/A'
+ $io->section('Résumé des actions par code INSEE :');
+ foreach ($toDelete as $zone => $statsList) {
+ $io->writeln("Zone INSEE : $zone");
+ $statKept = $toKeep[$zone];
+ $io->writeln(sprintf(" Gardé : [ID %d] %s | Créé: %s>",
+ $statKept->getId(),
+ $statKept->getName(),
+ $statKept->getDateCreated() ? $statKept->getDateCreated()->format('Y-m-d H:i:s') : 'N/A'
));
+ foreach ($statsList as $stat) {
+ $io->writeln(sprintf(" Supprimé: [ID %d] %s | Créé: %s>",
+ $stat->getId(),
+ $stat->getName(),
+ $stat->getDateCreated() ? $stat->getDateCreated()->format('Y-m-d H:i:s') : 'N/A'
+ ));
+ }
}
+ $io->warning($totalToDelete . ' objet(s) Stats seraient supprimés.');
if ($dryRun) {
$io->note('Mode dry-run : aucune suppression effectuée.');
return Command::SUCCESS;
}
- foreach ($toDelete as $stat) {
- $this->entityManager->remove($stat);
+ foreach ($toDelete as $statsList) {
+ foreach ($statsList as $stat) {
+ $this->entityManager->remove($stat);
+ }
}
$this->entityManager->flush();
- $io->success(count($toDelete) . ' doublon(s) supprimé(s) !');
+ $io->success($totalToDelete . ' doublon(s) supprimé(s) !');
return Command::SUCCESS;
}
}
\ No newline at end of file
diff --git a/src/Entity/Stats.php b/src/Entity/Stats.php
index 21f71e15..a2235e77 100644
--- a/src/Entity/Stats.php
+++ b/src/Entity/Stats.php
@@ -9,6 +9,8 @@ use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: StatsRepository::class)]
+#[ORM\Table(name: 'stats')]
+#[ORM\UniqueConstraint(name: 'uniq_stats_zone', columns: ['zone'])]
class Stats
{
#[ORM\Id]