refactor(command): improve database collection logic for deletion command by using unique identifiers and enhancing user experience
This commit is contained in:
@@ -110,16 +110,65 @@ class ServicesDelete extends Command
|
|||||||
|
|
||||||
private function deleteDatabase()
|
private function deleteDatabase()
|
||||||
{
|
{
|
||||||
// Collect all databases from all types
|
// Collect all databases from all types with unique identifiers
|
||||||
$allDatabases = collect()
|
$allDatabases = collect();
|
||||||
->merge(StandalonePostgresql::all()->map(fn ($db) => (object) ['id' => $db->id, 'name' => $db->name, 'type' => 'PostgreSQL', 'model' => $db]))
|
$databaseOptions = collect();
|
||||||
->merge(StandaloneMysql::all()->map(fn ($db) => (object) ['id' => $db->id, 'name' => $db->name, 'type' => 'MySQL', 'model' => $db]))
|
|
||||||
->merge(StandaloneMariadb::all()->map(fn ($db) => (object) ['id' => $db->id, 'name' => $db->name, 'type' => 'MariaDB', 'model' => $db]))
|
// Add PostgreSQL databases
|
||||||
->merge(StandaloneMongodb::all()->map(fn ($db) => (object) ['id' => $db->id, 'name' => $db->name, 'type' => 'MongoDB', 'model' => $db]))
|
foreach (StandalonePostgresql::all() as $db) {
|
||||||
->merge(StandaloneRedis::all()->map(fn ($db) => (object) ['id' => $db->id, 'name' => $db->name, 'type' => 'Redis', 'model' => $db]))
|
$key = "postgresql_{$db->id}";
|
||||||
->merge(StandaloneKeydb::all()->map(fn ($db) => (object) ['id' => $db->id, 'name' => $db->name, 'type' => 'KeyDB', 'model' => $db]))
|
$allDatabases->put($key, $db);
|
||||||
->merge(StandaloneDragonfly::all()->map(fn ($db) => (object) ['id' => $db->id, 'name' => $db->name, 'type' => 'Dragonfly', 'model' => $db]))
|
$databaseOptions->put($key, "{$db->name} (PostgreSQL)");
|
||||||
->merge(StandaloneClickhouse::all()->map(fn ($db) => (object) ['id' => $db->id, 'name' => $db->name, 'type' => 'ClickHouse', 'model' => $db]));
|
}
|
||||||
|
|
||||||
|
// Add MySQL databases
|
||||||
|
foreach (StandaloneMysql::all() as $db) {
|
||||||
|
$key = "mysql_{$db->id}";
|
||||||
|
$allDatabases->put($key, $db);
|
||||||
|
$databaseOptions->put($key, "{$db->name} (MySQL)");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add MariaDB databases
|
||||||
|
foreach (StandaloneMariadb::all() as $db) {
|
||||||
|
$key = "mariadb_{$db->id}";
|
||||||
|
$allDatabases->put($key, $db);
|
||||||
|
$databaseOptions->put($key, "{$db->name} (MariaDB)");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add MongoDB databases
|
||||||
|
foreach (StandaloneMongodb::all() as $db) {
|
||||||
|
$key = "mongodb_{$db->id}";
|
||||||
|
$allDatabases->put($key, $db);
|
||||||
|
$databaseOptions->put($key, "{$db->name} (MongoDB)");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add Redis databases
|
||||||
|
foreach (StandaloneRedis::all() as $db) {
|
||||||
|
$key = "redis_{$db->id}";
|
||||||
|
$allDatabases->put($key, $db);
|
||||||
|
$databaseOptions->put($key, "{$db->name} (Redis)");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add KeyDB databases
|
||||||
|
foreach (StandaloneKeydb::all() as $db) {
|
||||||
|
$key = "keydb_{$db->id}";
|
||||||
|
$allDatabases->put($key, $db);
|
||||||
|
$databaseOptions->put($key, "{$db->name} (KeyDB)");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add Dragonfly databases
|
||||||
|
foreach (StandaloneDragonfly::all() as $db) {
|
||||||
|
$key = "dragonfly_{$db->id}";
|
||||||
|
$allDatabases->put($key, $db);
|
||||||
|
$databaseOptions->put($key, "{$db->name} (Dragonfly)");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add ClickHouse databases
|
||||||
|
foreach (StandaloneClickhouse::all() as $db) {
|
||||||
|
$key = "clickhouse_{$db->id}";
|
||||||
|
$allDatabases->put($key, $db);
|
||||||
|
$databaseOptions->put($key, "{$db->name} (ClickHouse)");
|
||||||
|
}
|
||||||
|
|
||||||
if ($allDatabases->count() === 0) {
|
if ($allDatabases->count() === 0) {
|
||||||
$this->error('There are no databases to delete.');
|
$this->error('There are no databases to delete.');
|
||||||
@@ -127,25 +176,20 @@ class ServicesDelete extends Command
|
|||||||
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 database do you want to delete?',
|
'What database do you want to delete?',
|
||||||
$databaseOptions,
|
$databaseOptions->sortKeys(),
|
||||||
);
|
);
|
||||||
|
|
||||||
foreach ($databasesToDelete as $databaseId) {
|
foreach ($databasesToDelete as $databaseKey) {
|
||||||
$toDelete = $allDatabases->where('id', $databaseId)->first();
|
$toDelete = $allDatabases->get($databaseKey);
|
||||||
if ($toDelete) {
|
if ($toDelete) {
|
||||||
$this->info("{$toDelete->name} ({$toDelete->type})");
|
$this->info($toDelete);
|
||||||
$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->model);
|
DeleteResourceJob::dispatch($toDelete);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user