up clean command
This commit is contained in:
parent
ae8b15e54c
commit
ca0ec580f5
2 changed files with 28 additions and 12 deletions
|
@ -47,6 +47,7 @@ class CleanDuplicateStatsCommand extends Command
|
||||||
}
|
}
|
||||||
|
|
||||||
$toDelete = [];
|
$toDelete = [];
|
||||||
|
$toKeep = [];
|
||||||
foreach ($statsByZone as $zone => $statsList) {
|
foreach ($statsByZone as $zone => $statsList) {
|
||||||
if (count($statsList) > 1) {
|
if (count($statsList) > 1) {
|
||||||
// Trier par date_created (le plus ancien d'abord), puis par id si date absente
|
// 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
|
// 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é.');
|
$io->success('Aucun doublon trouvé.');
|
||||||
return Command::SUCCESS;
|
return Command::SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
$io->warning(count($toDelete) . ' objet(s) Stats seraient supprimés.');
|
$io->section('Résumé des actions par code INSEE :');
|
||||||
foreach ($toDelete as $stat) {
|
foreach ($toDelete as $zone => $statsList) {
|
||||||
$io->text(sprintf('Zone: %s | ID: %d | Nom: %s | Créé: %s',
|
$io->writeln("<info>Zone INSEE : $zone</info>");
|
||||||
$stat->getZone(),
|
$statKept = $toKeep[$zone];
|
||||||
$stat->getId(),
|
$io->writeln(sprintf(" <fg=green>Gardé : [ID %d] %s | Créé: %s</>",
|
||||||
$stat->getName(),
|
$statKept->getId(),
|
||||||
$stat->getDateCreated() ? $stat->getDateCreated()->format('Y-m-d H:i:s') : 'N/A'
|
$statKept->getName(),
|
||||||
|
$statKept->getDateCreated() ? $statKept->getDateCreated()->format('Y-m-d H:i:s') : 'N/A'
|
||||||
));
|
));
|
||||||
|
foreach ($statsList as $stat) {
|
||||||
|
$io->writeln(sprintf(" <fg=red>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) {
|
if ($dryRun) {
|
||||||
$io->note('Mode dry-run : aucune suppression effectuée.');
|
$io->note('Mode dry-run : aucune suppression effectuée.');
|
||||||
return Command::SUCCESS;
|
return Command::SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($toDelete as $stat) {
|
foreach ($toDelete as $statsList) {
|
||||||
$this->entityManager->remove($stat);
|
foreach ($statsList as $stat) {
|
||||||
|
$this->entityManager->remove($stat);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$this->entityManager->flush();
|
$this->entityManager->flush();
|
||||||
$io->success(count($toDelete) . ' doublon(s) supprimé(s) !');
|
$io->success($totalToDelete . ' doublon(s) supprimé(s) !');
|
||||||
return Command::SUCCESS;
|
return Command::SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -9,6 +9,8 @@ use Doctrine\DBAL\Types\Types;
|
||||||
use Doctrine\ORM\Mapping as ORM;
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
|
||||||
#[ORM\Entity(repositoryClass: StatsRepository::class)]
|
#[ORM\Entity(repositoryClass: StatsRepository::class)]
|
||||||
|
#[ORM\Table(name: 'stats')]
|
||||||
|
#[ORM\UniqueConstraint(name: 'uniq_stats_zone', columns: ['zone'])]
|
||||||
class Stats
|
class Stats
|
||||||
{
|
{
|
||||||
#[ORM\Id]
|
#[ORM\Id]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue