From 04622a9e3bccc8b13e53a20ab3b1f7a8f6370d06 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Wed, 9 Aug 2023 16:47:24 +0200 Subject: [PATCH] Refactor db migrations --- app/Http/Controllers/DatabaseController.php | 17 +++++++++++++++ app/Models/ScheduledDatabaseBackup.php | 3 +-- app/Models/StandalonePostgresql.php | 5 +++++ ...scription_field_to_applications_table.php} | 0 ...emove_foreignId_environment_variables.php} | 0 ...4_add_readonly_localpersistentvolumes.php} | 0 ...50_create_standalone_postgresqls_table.php | 3 ++- ...ort_mappings_to_standalone_postgresqls.php | 21 ------------------- ...reate_scheduled_database_backups_table.php | 1 + ...res_password_of_standalone_postgresqls.php | 21 ------------------- .../components/databases/navbar.blade.php | 4 ++++ .../livewire/project/shared/danger.blade.php | 2 +- .../views/livewire/server/form.blade.php | 2 +- .../views/livewire/team/delete.blade.php | 2 +- .../views/project/database/backups.blade.php | 18 ++++++++++++++++ routes/web.php | 7 ++++++- 16 files changed, 57 insertions(+), 49 deletions(-) rename database/migrations/{2023_08_07_142951_add_description_field_to_applications_table.php => 2023_08_06_142951_add_description_field_to_applications_table.php} (100%) rename database/migrations/{2023_08_07_142952_remove_foreignId_environment_variables.php => 2023_08_06_142952_remove_foreignId_environment_variables.php} (100%) rename database/migrations/{2023_08_07_142954_add_readonly_localpersistentvolumes.php => 2023_08_06_142954_add_readonly_localpersistentvolumes.php} (100%) delete mode 100644 database/migrations/2023_08_08_114038_add_port_mappings_to_standalone_postgresqls.php delete mode 100644 database/migrations/2023_08_09_154921_change_postgres_password_of_standalone_postgresqls.php create mode 100644 resources/views/project/database/backups.blade.php diff --git a/app/Http/Controllers/DatabaseController.php b/app/Http/Controllers/DatabaseController.php index 8cda4f1f2..2bcc23863 100644 --- a/app/Http/Controllers/DatabaseController.php +++ b/app/Http/Controllers/DatabaseController.php @@ -25,4 +25,21 @@ class DatabaseController extends Controller } return view('project.database.configuration', ['database' => $database]); } + + public function backups() + { + $project = session('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'); + } + return view('project.database.backups', ['database' => $database]); + } } diff --git a/app/Models/ScheduledDatabaseBackup.php b/app/Models/ScheduledDatabaseBackup.php index 62dcccc64..5ecd5e1b0 100644 --- a/app/Models/ScheduledDatabaseBackup.php +++ b/app/Models/ScheduledDatabaseBackup.php @@ -2,9 +2,8 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Model; -class ScheduledDatabaseBackup extends Model +class ScheduledDatabaseBackup extends BaseModel { protected $guarded = []; diff --git a/app/Models/StandalonePostgresql.php b/app/Models/StandalonePostgresql.php index 55fe96e91..58284307b 100644 --- a/app/Models/StandalonePostgresql.php +++ b/app/Models/StandalonePostgresql.php @@ -83,4 +83,9 @@ class StandalonePostgresql extends BaseModel { return $this->morphMany(LocalPersistentVolume::class, 'resource'); } + + public function scheduledBackups() + { + return $this->morphMany(ScheduledDatabaseBackup::class, 'database'); + } } diff --git a/database/migrations/2023_08_07_142951_add_description_field_to_applications_table.php b/database/migrations/2023_08_06_142951_add_description_field_to_applications_table.php similarity index 100% rename from database/migrations/2023_08_07_142951_add_description_field_to_applications_table.php rename to database/migrations/2023_08_06_142951_add_description_field_to_applications_table.php diff --git a/database/migrations/2023_08_07_142952_remove_foreignId_environment_variables.php b/database/migrations/2023_08_06_142952_remove_foreignId_environment_variables.php similarity index 100% rename from database/migrations/2023_08_07_142952_remove_foreignId_environment_variables.php rename to database/migrations/2023_08_06_142952_remove_foreignId_environment_variables.php diff --git a/database/migrations/2023_08_07_142954_add_readonly_localpersistentvolumes.php b/database/migrations/2023_08_06_142954_add_readonly_localpersistentvolumes.php similarity index 100% rename from database/migrations/2023_08_07_142954_add_readonly_localpersistentvolumes.php rename to database/migrations/2023_08_06_142954_add_readonly_localpersistentvolumes.php diff --git a/database/migrations/2023_08_07_142950_create_standalone_postgresqls_table.php b/database/migrations/2023_08_07_142950_create_standalone_postgresqls_table.php index 180d6382f..25f65e660 100644 --- a/database/migrations/2023_08_07_142950_create_standalone_postgresqls_table.php +++ b/database/migrations/2023_08_07_142950_create_standalone_postgresqls_table.php @@ -17,7 +17,7 @@ return new class extends Migration { $table->string('description')->nullable(); $table->string('postgres_user')->default('postgres'); - $table->string('postgres_password'); + $table->text('postgres_password'); $table->string('postgres_db')->default('postgres'); $table->string('postgres_initdb_args')->nullable(); $table->string('postgres_host_auth_method')->nullable(); @@ -28,6 +28,7 @@ return new class extends Migration { $table->string('image')->default('postgres:15-alpine'); $table->boolean('is_public')->default(false); $table->integer('public_port')->nullable(); + $table->text('ports_mappings')->nullable(); $table->string('limits_memory')->default("0"); $table->string('limits_memory_swap')->default("0"); diff --git a/database/migrations/2023_08_08_114038_add_port_mappings_to_standalone_postgresqls.php b/database/migrations/2023_08_08_114038_add_port_mappings_to_standalone_postgresqls.php deleted file mode 100644 index 33d6ec8e9..000000000 --- a/database/migrations/2023_08_08_114038_add_port_mappings_to_standalone_postgresqls.php +++ /dev/null @@ -1,21 +0,0 @@ -text('ports_mappings')->nullable(); - }); - } - - public function down(): void - { - Schema::table('standalone_postgresqls', function (Blueprint $table) { - $table->dropColumn('ports_mappings'); - }); - } -}; diff --git a/database/migrations/2023_08_08_150103_create_scheduled_database_backups_table.php b/database/migrations/2023_08_08_150103_create_scheduled_database_backups_table.php index f8c4f62db..c9d940367 100644 --- a/database/migrations/2023_08_08_150103_create_scheduled_database_backups_table.php +++ b/database/migrations/2023_08_08_150103_create_scheduled_database_backups_table.php @@ -9,6 +9,7 @@ return new class extends Migration { { Schema::create('scheduled_database_backups', function (Blueprint $table) { $table->id(); + $table->string('uuid')->unique(); $table->boolean('enabled')->default(true); $table->boolean('keep_locally')->default(true); $table->string('save_s3')->default(true); diff --git a/database/migrations/2023_08_09_154921_change_postgres_password_of_standalone_postgresqls.php b/database/migrations/2023_08_09_154921_change_postgres_password_of_standalone_postgresqls.php deleted file mode 100644 index f062f962a..000000000 --- a/database/migrations/2023_08_09_154921_change_postgres_password_of_standalone_postgresqls.php +++ /dev/null @@ -1,21 +0,0 @@ -text('postgres_password')->change(); - }); - } - - public function down(): void - { - Schema::table('standalone_postgresqls', function (Blueprint $table) { - $table->string('postgres_password')->change(); - }); - } -}; diff --git a/resources/views/components/databases/navbar.blade.php b/resources/views/components/databases/navbar.blade.php index 02e1b6257..c3de5b2c6 100644 --- a/resources/views/components/databases/navbar.blade.php +++ b/resources/views/components/databases/navbar.blade.php @@ -3,6 +3,10 @@ href="{{ route('project.database.configuration', $parameters) }}"> + + + {{-- --}}
{{-- --}} diff --git a/resources/views/livewire/project/shared/danger.blade.php b/resources/views/livewire/project/shared/danger.blade.php index 280bae794..36e91dff1 100644 --- a/resources/views/livewire/project/shared/danger.blade.php +++ b/resources/views/livewire/project/shared/danger.blade.php @@ -4,7 +4,7 @@

This resource will be deleted. It is not reversible.
Please think again.

-

Danger Zone

+

Danger Zone

Woah. I hope you know what are you doing.

Delete Resource

This will stop your containers, delete all related data, etc. Beware! There is no coming diff --git a/resources/views/livewire/server/form.blade.php b/resources/views/livewire/server/form.blade.php index dfed018e3..44ca6b2c6 100644 --- a/resources/views/livewire/server/form.blade.php +++ b/resources/views/livewire/server/form.blade.php @@ -81,7 +81,7 @@
@endif -

Danger Zone

+

Danger Zone

Woah. I hope you know what are you doing.

Delete Server

This will remove this server from Coolify. Beware! There is no coming diff --git a/resources/views/livewire/team/delete.blade.php b/resources/views/livewire/team/delete.blade.php index a93a1e61a..da158ce58 100644 --- a/resources/views/livewire/team/delete.blade.php +++ b/resources/views/livewire/team/delete.blade.php @@ -4,7 +4,7 @@

This team be deleted. It is not reversible.
Please think again.

-

Danger Zone

+

Danger Zone

Woah. I hope you know what are you doing.

Delete Team

@if (session('currentTeam.id') === 0) diff --git a/resources/views/project/database/backups.blade.php b/resources/views/project/database/backups.blade.php new file mode 100644 index 000000000..131ac1661 --- /dev/null +++ b/resources/views/project/database/backups.blade.php @@ -0,0 +1,18 @@ + +

Backups

+ +
+

Scheduled Backups

+
+ @forelse($database->scheduledBackups as $backup) +
+
Frequency: {{$backup->frequency}}
+
Keep locally: {{$backup->keep_locally}}
+
Sync to S3: {{$backup->save_s3}}
+
+ @empty +
No scheduled backups configured.
+ @endforelse +
+
+
diff --git a/routes/web.php b/routes/web.php index eaff9c3aa..9d05e62cd 100644 --- a/routes/web.php +++ b/routes/web.php @@ -52,13 +52,18 @@ Route::middleware(['auth'])->group(function () { Route::get('/project/{project_uuid}', [ProjectController::class, 'show'])->name('project.show'); Route::get('/project/{project_uuid}/{environment_name}/new', [ProjectController::class, 'new'])->name('project.resources.new'); Route::get('/project/{project_uuid}/{environment_name}', [ProjectController::class, 'resources'])->name('project.resources'); + + // Applications Route::get('/project/{project_uuid}/{environment_name}/application/{application_uuid}', [ApplicationController::class, 'configuration'])->name('project.application.configuration'); - Route::get('/project/{project_uuid}/{environment_name}/database/{database_uuid}', [DatabaseController::class, 'configuration'])->name('project.database.configuration'); Route::get('/project/{project_uuid}/{environment_name}/application/{application_uuid}/deployment', [ApplicationController::class, 'deployments'])->name('project.application.deployments'); Route::get( '/project/{project_uuid}/{environment_name}/application/{application_uuid}/deployment/{deployment_uuid}', [ApplicationController::class, 'deployment'] )->name('project.application.deployment'); + + // Databases + Route::get('/project/{project_uuid}/{environment_name}/database/{database_uuid}', [DatabaseController::class, 'configuration'])->name('project.database.configuration'); + Route::get('/project/{project_uuid}/{environment_name}/database/{database_uuid}/backups', [DatabaseController::class, 'backups'])->name('project.database.backups'); }); Route::middleware(['auth'])->group(function () {