diff --git a/app/Actions/Database/StartDatabaseProxy.php b/app/Actions/Database/StartDatabaseProxy.php index d9272356c..3b36e9b70 100644 --- a/app/Actions/Database/StartDatabaseProxy.php +++ b/app/Actions/Database/StartDatabaseProxy.php @@ -22,74 +22,27 @@ class StartDatabaseProxy public function handle(StandaloneRedis|StandalonePostgresql|StandaloneMongodb|StandaloneMysql|StandaloneMariadb|StandaloneKeydb|StandaloneDragonfly|StandaloneClickhouse|ServiceDatabase $database) { - $internalPort = null; - $type = $database->getMorphClass(); + $databaseType = $database->database_type; $network = data_get($database, 'destination.network'); $server = data_get($database, 'destination.server'); $containerName = data_get($database, 'uuid'); $proxyContainerName = "{$database->uuid}-proxy"; if ($database->getMorphClass() === \App\Models\ServiceDatabase::class) { $databaseType = $database->databaseType(); - // $connectPredefined = data_get($database, 'service.connect_to_docker_network'); $network = $database->service->uuid; $server = data_get($database, 'service.destination.server'); $proxyContainerName = "{$database->service->uuid}-proxy"; - switch ($databaseType) { - case 'standalone-mariadb': - $type = \App\Models\StandaloneMariadb::class; - $containerName = "mariadb-{$database->service->uuid}"; - break; - case 'standalone-mongodb': - $type = \App\Models\StandaloneMongodb::class; - $containerName = "mongodb-{$database->service->uuid}"; - break; - case 'standalone-mysql': - $type = \App\Models\StandaloneMysql::class; - $containerName = "mysql-{$database->service->uuid}"; - break; - case 'standalone-postgresql': - $type = \App\Models\StandalonePostgresql::class; - $containerName = "postgresql-{$database->service->uuid}"; - break; - case 'standalone-redis': - $type = \App\Models\StandaloneRedis::class; - $containerName = "redis-{$database->service->uuid}"; - break; - case 'standalone-keydb': - $type = \App\Models\StandaloneKeydb::class; - $containerName = "keydb-{$database->service->uuid}"; - break; - case 'standalone-dragonfly': - $type = \App\Models\StandaloneDragonfly::class; - $containerName = "dragonfly-{$database->service->uuid}"; - break; - case 'standalone-clickhouse': - $type = \App\Models\StandaloneClickhouse::class; - $containerName = "clickhouse-{$database->service->uuid}"; - break; - case 'standalone-supabase/postgres': - $type = \App\Models\StandalonePostgresql::class; - $containerName = "supabase-db-{$database->service->uuid}"; - break; - } - } - if ($type === \App\Models\StandaloneRedis::class) { - $internalPort = 6379; - } elseif ($type === \App\Models\StandalonePostgresql::class) { - $internalPort = 5432; - } elseif ($type === \App\Models\StandaloneMongodb::class) { - $internalPort = 27017; - } elseif ($type === \App\Models\StandaloneMysql::class) { - $internalPort = 3306; - } elseif ($type === \App\Models\StandaloneMariadb::class) { - $internalPort = 3306; - } elseif ($type === \App\Models\StandaloneKeydb::class) { - $internalPort = 6379; - } elseif ($type === \App\Models\StandaloneDragonfly::class) { - $internalPort = 6379; - } elseif ($type === \App\Models\StandaloneClickhouse::class) { - $internalPort = 9000; + $containerName = substr(str($database->name)->slug().'-'.$database->service->uuid, 0, 32); } + $internalPort = match ($databaseType) { + 'standalone-mariadb', 'standalone-mysql' => 3306, + 'standalone-postgresql', 'standalone-supabase/postgres' => 5432, + 'standalone-redis', 'standalone-keydb', 'standalone-dragonfly' => 6379, + 'standalone-clickhouse' => 9000, + 'standalone-mongodb' => 27017, + default => throw new \Exception("Unsupported database type: $databaseType"), + }; + $configuration_dir = database_proxy_dir($database->uuid); $nginxconf = <<parameters = get_route_parameters(); if ($this->database->is_public) { $this->db_url_public = $this->database->getServiceDatabaseUrl(); } $this->refreshFileStorages(); } + public function delete($password) + { + if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation')) { + if (! Hash::check($password, Auth::user()->password)) { + $this->addError('password', 'The provided password is incorrect.'); + + return; + } + } + + try { + $this->database->delete(); + $this->dispatch('success', 'Database deleted.'); + + return redirect()->route('project.service.configuration', $this->parameters); + } catch (\Throwable $e) { + return handleError($e, $this); + } + } + public function instantSaveExclude() { $this->submit(); diff --git a/resources/views/livewire/project/service/database.blade.php b/resources/views/livewire/project/service/database.blade.php index c18473a14..8ec73b4de 100644 --- a/resources/views/livewire/project/service/database.blade.php +++ b/resources/views/livewire/project/service/database.blade.php @@ -7,6 +7,10 @@

{{ Str::headline($database->name) }}

@endif Save +
diff --git a/resources/views/livewire/project/service/index.blade.php b/resources/views/livewire/project/service/index.blade.php index 8796be966..d5c0c4778 100644 --- a/resources/views/livewire/project/service/index.blade.php +++ b/resources/views/livewire/project/service/index.blade.php @@ -3,8 +3,8 @@
+ class="{{ request()->routeIs('project.service.configuration') ? 'menu-item-active' : '' }}" wire:navigate + href="{{ route('project.service.configuration', [...$parameters, 'stack_service_uuid' => null]) }}"> General @if ($serviceDatabase?->isBackupSolutionAvailable()) Backups + @click.prevent="activeTab = 'backups'; window.location.hash = 'backups'" wire:navigate + href="#backups">Backups @endif