refactor(command): streamline database deletion process to handle multiple database types and improve user experience
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user