refactor(command): streamline database deletion process to handle multiple database types and improve user experience

This commit is contained in:
Andras Bacsai
2025-09-05 14:56:30 +02:00
parent b17c65b224
commit 16447b7391

View File

@@ -110,52 +110,42 @@ class ServicesDelete extends Command
private function deleteDatabase() private function deleteDatabase()
{ {
$databaseType = select( // Collect all databases from all types
'What type of database do you want to delete?', $allDatabases = collect()
[ ->merge(StandalonePostgresql::all()->map(fn ($db) => (object) ['id' => $db->id, 'name' => $db->name, 'type' => 'PostgreSQL', 'model' => $db]))
'PostgreSQL' => 'PostgreSQL', ->merge(StandaloneMysql::all()->map(fn ($db) => (object) ['id' => $db->id, 'name' => $db->name, 'type' => 'MySQL', 'model' => $db]))
'MySQL' => 'MySQL', ->merge(StandaloneMariadb::all()->map(fn ($db) => (object) ['id' => $db->id, 'name' => $db->name, 'type' => 'MariaDB', 'model' => $db]))
'MariaDB' => 'MariaDB', ->merge(StandaloneMongodb::all()->map(fn ($db) => (object) ['id' => $db->id, 'name' => $db->name, 'type' => 'MongoDB', 'model' => $db]))
'MongoDB' => 'MongoDB', ->merge(StandaloneRedis::all()->map(fn ($db) => (object) ['id' => $db->id, 'name' => $db->name, 'type' => 'Redis', 'model' => $db]))
'Redis' => 'Redis', ->merge(StandaloneKeydb::all()->map(fn ($db) => (object) ['id' => $db->id, 'name' => $db->name, 'type' => 'KeyDB', 'model' => $db]))
'KeyDB' => 'KeyDB', ->merge(StandaloneDragonfly::all()->map(fn ($db) => (object) ['id' => $db->id, 'name' => $db->name, 'type' => 'Dragonfly', 'model' => $db]))
'Dragonfly' => 'Dragonfly', ->merge(StandaloneClickhouse::all()->map(fn ($db) => (object) ['id' => $db->id, 'name' => $db->name, 'type' => 'ClickHouse', 'model' => $db]));
'ClickHouse' => 'ClickHouse',
],
);
$databases = match ($databaseType) { if ($allDatabases->count() === 0) {
'PostgreSQL' => StandalonePostgresql::all(), $this->error('There are no databases to delete.');
'MySQL' => StandaloneMysql::all(),
'MariaDB' => StandaloneMariadb::all(),
'MongoDB' => StandaloneMongodb::all(),
'Redis' => StandaloneRedis::all(),
'KeyDB' => StandaloneKeydb::all(),
'Dragonfly' => StandaloneDragonfly::all(),
'ClickHouse' => StandaloneClickhouse::all(),
default => collect(),
};
if ($databases->count() === 0) {
$this->error("There are no {$databaseType} databases to delete.");
return; return;
} }
// Create options with type information for better UX
$databaseOptions = $allDatabases->mapWithKeys(function ($db) {
return [$db->id => "{$db->name} ({$db->type})"];
})->sortKeys();
$databasesToDelete = multiselect( $databasesToDelete = multiselect(
"What {$databaseType} database do you want to delete?", 'What database do you want to delete?',
$databases->pluck('name', 'id')->sortKeys(), $databaseOptions,
); );
foreach ($databasesToDelete as $database) { foreach ($databasesToDelete as $databaseId) {
$toDelete = $databases->where('id', $database)->first(); $toDelete = $allDatabases->where('id', $databaseId)->first();
if ($toDelete) { if ($toDelete) {
$this->info($toDelete); $this->info("{$toDelete->name} ({$toDelete->type})");
$confirmed = confirm('Are you sure you want to delete all selected resources?'); $confirmed = confirm('Are you sure you want to delete all selected resources?');
if (! $confirmed) { if (! $confirmed) {
return; return;
} }
DeleteResourceJob::dispatch($toDelete); DeleteResourceJob::dispatch($toDelete->model);
} }
} }
} }