listBackups(); if (empty($backups)) { $this->warn("Aucune sauvegarde disponible dans storage/app/backups/."); return self::FAILURE; } // --list : afficher la liste et sortir if ($this->option('list')) { $rows = array_map(fn ($b) => [ basename($b), $this->humanSize(filesize($b)), date('d/m/Y H:i:s', filemtime($b)), ], $backups); $this->table(['Fichier', 'Taille', 'Date'], $rows); return self::SUCCESS; } // Sélection interactive $choices = array_map('basename', $backups); $choice = $this->choice('Choisir la sauvegarde à restaurer :', $choices, 0); $path = storage_path("app/backups/{$choice}"); $this->warn("Sauvegarde sélectionnée : {$choice}"); $this->warn("ATTENTION : cette opération remplace la base de données actuelle."); if (! $this->confirm('Continuer ?')) { $this->line("Annulé."); return self::SUCCESS; } try { $updates->restoreBackup($path); $this->info("Base de données restaurée avec succès."); } catch (\Exception $e) { $this->error("Restauration échouée : " . $e->getMessage()); return self::FAILURE; } return self::SUCCESS; } private function humanSize(int $bytes): string { if ($bytes >= 1_048_576) return round($bytes / 1_048_576, 1) . ' Mo'; if ($bytes >= 1_024) return round($bytes / 1_024, 0) . ' Ko'; return $bytes . ' o'; } }