From 38256af9b31b3bd5351dfd5789c045aeee270e16 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Tue, 17 Dec 2024 12:10:55 +0100 Subject: [PATCH] fix: refactor database view --- .../Project/Application/Configuration.php | 11 +- .../Project/Database/Configuration.php | 35 +++-- app/Livewire/Project/Shared/Destination.php | 94 ++++++++------ .../application/configuration.blade.php | 2 +- .../project/database/configuration.blade.php | 122 +++++++----------- .../project/shared/destination.blade.php | 14 +- routes/web.php | 11 ++ 7 files changed, 145 insertions(+), 144 deletions(-) diff --git a/app/Livewire/Project/Application/Configuration.php b/app/Livewire/Project/Application/Configuration.php index bf2811075..792e55e45 100644 --- a/app/Livewire/Project/Application/Configuration.php +++ b/app/Livewire/Project/Application/Configuration.php @@ -3,7 +3,6 @@ namespace App\Livewire\Project\Application; use App\Models\Application; -use App\Models\Server; use Livewire\Component; class Configuration extends Component @@ -40,15 +39,7 @@ class Configuration extends Component $this->project = $project; $this->environment = $environment; $this->application = $application; - if ($application->destination && $application->destination->server) { - $mainServer = $application->destination->server; - $this->servers = Server::ownedByCurrentTeam() - ->select('id', 'name') - ->where('id', '!=', $mainServer->id) - ->get(); - } else { - $this->servers = collect(); - } + } public function render() diff --git a/app/Livewire/Project/Database/Configuration.php b/app/Livewire/Project/Database/Configuration.php index e14b27cf6..4e08f0fee 100644 --- a/app/Livewire/Project/Database/Configuration.php +++ b/app/Livewire/Project/Database/Configuration.php @@ -6,23 +6,34 @@ use Livewire\Component; class Configuration extends Component { + public $currentRoute; + public $database; + public $project; + + public $environment; + public function mount() { - $project = currentTeam()->load(['projects'])->projects->where('uuid', request()->route('project_uuid'))->first(); - if (! $project) { - return redirect()->route('dashboard'); - } - $environment = $project->load(['environments'])->environments->where('name', request()->route('environment_name'))->first()->load(['applications']); - if (! $environment) { - return redirect()->route('dashboard'); - } - $database = $environment->databases()->where('uuid', request()->route('database_uuid'))->first(); - if (! $database) { - return redirect()->route('dashboard'); - } + $this->currentRoute = request()->route()->getName(); + + $project = currentTeam() + ->projects() + ->select('id', 'uuid', 'team_id') + ->where('uuid', request()->route('project_uuid')) + ->firstOrFail(); + $environment = $project->environments() + ->select('id', 'name', 'project_id') + ->where('name', request()->route('environment_name')) + ->firstOrFail(); + $database = $environment->databases() + ->where('uuid', request()->route('database_uuid')) + ->firstOrFail(); + $this->database = $database; + $this->project = $project; + $this->environment = $environment; if (str($this->database->status)->startsWith('running') && is_null($this->database->config_hash)) { $this->database->isConfigurationChanged(true); $this->dispatch('configurationChanged'); diff --git a/app/Livewire/Project/Shared/Destination.php b/app/Livewire/Project/Shared/Destination.php index c305e817c..61dcab196 100644 --- a/app/Livewire/Project/Shared/Destination.php +++ b/app/Livewire/Project/Shared/Destination.php @@ -8,6 +8,7 @@ use App\Events\ApplicationStatusChanged; use App\Models\InstanceSettings; use App\Models\Server; use App\Models\StandaloneDocker; +use Illuminate\Support\Collection; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; use Livewire\Component; @@ -17,7 +18,7 @@ class Destination extends Component { public $resource; - public $networks = []; + public Collection $networks; public function getListeners() { @@ -30,6 +31,7 @@ class Destination extends Component public function mount() { + $this->networks = collect([]); $this->loadData(); } @@ -55,38 +57,46 @@ class Destination extends Component } } - public function stop(int $server_id) + public function stop($serverId) { - $server = Server::find($server_id); - StopApplicationOneServer::run($this->resource, $server); - $this->refreshServers(); + try { + $server = Server::ownedByCurrentTeam()->findOrFail($serverId); + StopApplicationOneServer::run($this->resource, $server); + $this->refreshServers(); + } catch (\Exception $e) { + return handleError($e, $this); + } } public function redeploy(int $network_id, int $server_id) { - if ($this->resource->additional_servers->count() > 0 && str($this->resource->docker_registry_image_name)->isEmpty()) { - $this->dispatch('error', 'Failed to deploy.', 'Before deploying to multiple servers, you must first set a Docker image in the General tab.
More information here: documentation'); + try { + if ($this->resource->additional_servers->count() > 0 && str($this->resource->docker_registry_image_name)->isEmpty()) { + $this->dispatch('error', 'Failed to deploy.', 'Before deploying to multiple servers, you must first set a Docker image in the General tab.
More information here: documentation'); - return; + return; + } + $deployment_uuid = new Cuid2; + $server = Server::ownedByCurrentTeam()->findOrFail($server_id); + $destination = $server->standaloneDockers->where('id', $network_id)->firstOrFail(); + queue_application_deployment( + deployment_uuid: $deployment_uuid, + application: $this->resource, + server: $server, + destination: $destination, + only_this_server: true, + no_questions_asked: true, + ); + + return redirect()->route('project.application.deployment.show', [ + 'project_uuid' => data_get($this->resource, 'environment.project.uuid'), + 'application_uuid' => data_get($this->resource, 'uuid'), + 'deployment_uuid' => $deployment_uuid, + 'environment_name' => data_get($this->resource, 'environment.name'), + ]); + } catch (\Exception $e) { + return handleError($e, $this); } - $deployment_uuid = new Cuid2; - $server = Server::find($server_id); - $destination = StandaloneDocker::find($network_id); - queue_application_deployment( - deployment_uuid: $deployment_uuid, - application: $this->resource, - server: $server, - destination: $destination, - only_this_server: true, - no_questions_asked: true, - ); - - return redirect()->route('project.application.deployment.show', [ - 'project_uuid' => data_get($this->resource, 'environment.project.uuid'), - 'application_uuid' => data_get($this->resource, 'uuid'), - 'deployment_uuid' => $deployment_uuid, - 'environment_name' => data_get($this->resource, 'environment.name'), - ]); } public function promote(int $network_id, int $server_id) @@ -119,23 +129,27 @@ class Destination extends Component public function removeServer(int $network_id, int $server_id, $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.'); + try { + 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; + } + } + + if ($this->resource->destination->server->id == $server_id && $this->resource->destination->id == $network_id) { + $this->dispatch('error', 'You cannot remove this destination server.', 'You are trying to remove the main server.'); return; } + $server = Server::ownedByCurrentTeam()->findOrFail($server_id); + StopApplicationOneServer::run($this->resource, $server); + $this->resource->additional_networks()->detach($network_id, ['server_id' => $server_id]); + $this->loadData(); + ApplicationStatusChanged::dispatch(data_get($this->resource, 'environment.project.team.id')); + } catch (\Exception $e) { + return handleError($e, $this); } - - if ($this->resource->destination->server->id == $server_id && $this->resource->destination->id == $network_id) { - $this->dispatch('error', 'You cannot remove this destination server.', 'You are trying to remove the main server.'); - - return; - } - $server = Server::find($server_id); - StopApplicationOneServer::run($this->resource, $server); - $this->resource->additional_networks()->detach($network_id, ['server_id' => $server_id]); - $this->loadData(); - ApplicationStatusChanged::dispatch(data_get($this->resource, 'environment.project.team.id')); } } diff --git a/resources/views/livewire/project/application/configuration.blade.php b/resources/views/livewire/project/application/configuration.blade.php index fc2b8c7c0..7827476d8 100644 --- a/resources/views/livewire/project/application/configuration.blade.php +++ b/resources/views/livewire/project/application/configuration.blade.php @@ -98,7 +98,7 @@ @elseif (request()->route()->getName() === 'project.application.source' && $application->git_based()) @elseif (request()->route()->getName() === 'project.application.servers') - + @elseif (request()->route()->getName() === 'project.application.scheduled-tasks.show') @elseif (request()->route()->getName() === 'project.application.webhooks') diff --git a/resources/views/livewire/project/database/configuration.blade.php b/resources/views/livewire/project/database/configuration.blade.php index 652aec3eb..b0702c24a 100644 --- a/resources/views/livewire/project/database/configuration.blade.php +++ b/resources/views/livewire/project/database/configuration.blade.php @@ -5,57 +5,45 @@

Configuration

-
+
-
+ @if (request()->route()->getName() === 'project.database.configuration') @if ($database->type() === 'standalone-postgresql') @elseif ($database->type() === 'standalone-redis') @@ -73,37 +61,27 @@ @elseif ($database->type() === 'standalone-clickhouse') @endif -
-
+ @elseif (request()->route()->getName() === 'project.database.environment-variables') -
-
+ @elseif (request()->route()->getName() === 'project.database.servers') -
-
+ @elseif (request()->route()->getName() === 'project.database.persistent-storage') -
-
- -
-
- -
-
+ @elseif (request()->route()->getName() === 'project.database.import-backups') -
-
+ @elseif (request()->route()->getName() === 'project.database.webhooks') + + @elseif (request()->route()->getName() === 'project.database.resource-limits') + + @elseif (request()->route()->getName() === 'project.database.resource-operations') -
-
+ @elseif (request()->route()->getName() === 'project.database.metrics') -
-
- -
-
+ @elseif (request()->route()->getName() === 'project.database.tags') + + @elseif (request()->route()->getName() === 'project.database.danger') -
+ @endif
diff --git a/resources/views/livewire/project/shared/destination.blade.php b/resources/views/livewire/project/shared/destination.blade.php index 52429c37c..f0ae90830 100644 --- a/resources/views/livewire/project/shared/destination.blade.php +++ b/resources/views/livewire/project/shared/destination.blade.php @@ -62,17 +62,13 @@ Stop @endif - + shortConfirmationLabel="Server Name" step3ButtonText="Permanently Remove Server" /> @endforeach diff --git a/routes/web.php b/routes/web.php index 43012e600..6e60da972 100644 --- a/routes/web.php +++ b/routes/web.php @@ -208,6 +208,17 @@ Route::middleware(['auth', 'verified'])->group(function () { }); Route::prefix('project/{project_uuid}/{environment_name}/database/{database_uuid}')->group(function () { Route::get('/', DatabaseConfiguration::class)->name('project.database.configuration'); + Route::get('/environment-variables', DatabaseConfiguration::class)->name('project.database.environment-variables'); + Route::get('/servers', DatabaseConfiguration::class)->name('project.database.servers'); + Route::get('/import-backups', DatabaseConfiguration::class)->name('project.database.import-backups'); + Route::get('/persistent-storage', DatabaseConfiguration::class)->name('project.database.persistent-storage'); + Route::get('/webhooks', DatabaseConfiguration::class)->name('project.database.webhooks'); + Route::get('/resource-limits', DatabaseConfiguration::class)->name('project.database.resource-limits'); + Route::get('/resource-operations', DatabaseConfiguration::class)->name('project.database.resource-operations'); + Route::get('/metrics', DatabaseConfiguration::class)->name('project.database.metrics'); + Route::get('/tags', DatabaseConfiguration::class)->name('project.database.tags'); + Route::get('/danger', DatabaseConfiguration::class)->name('project.database.danger'); + Route::get('/logs', Logs::class)->name('project.database.logs'); Route::get('/terminal', ExecuteContainerCommand::class)->name('project.database.command'); Route::get('/backups', DatabaseBackupIndex::class)->name('project.database.backup.index');