fix: backward compatibility

- Add migrations that move email, discord and telegram notifications to the new settings tables for each notification
- drop now unused columns form the teams table
This commit is contained in:
peaklabs-dev
2024-12-06 15:19:31 +01:00
parent 38aa46bc6b
commit 4ff317001d
3 changed files with 117 additions and 130 deletions

View File

@@ -1,45 +1,41 @@
<?php <?php
use App\Models\Team;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
return new class extends Migration return new class extends Migration
{ {
public function up(): void public function up(): void
{ {
$teams = Team::all(); $teams = DB::table('teams')->get();
foreach ($teams as $team) { foreach ($teams as $team) {
$team->emailNotificationSettings()->updateOrCreate( DB::table('email_notification_settings')->insert([
['team_id' => $team->id], 'team_id' => $team->id,
[ 'smtp_enabled' => $team->smtp_enabled ?? false,
'smtp_enabled' => $team->smtp_enabled ?? false, 'smtp_from_address' => $team->smtp_from_address,
'smtp_from_address' => $team->smtp_from_address, 'smtp_from_name' => $team->smtp_from_name,
'smtp_from_name' => $team->smtp_from_name, 'smtp_recipients' => $team->smtp_recipients,
'smtp_recipients' => $team->smtp_recipients, 'smtp_host' => $team->smtp_host,
'smtp_host' => $team->smtp_host, 'smtp_port' => $team->smtp_port,
'smtp_port' => $team->smtp_port, 'smtp_encryption' => $team->smtp_encryption,
'smtp_encryption' => $team->smtp_encryption, 'smtp_username' => $team->smtp_username,
'smtp_username' => $team->smtp_username, 'smtp_password' => $team->smtp_password,
'smtp_password' => $team->smtp_password, 'smtp_timeout' => $team->smtp_timeout,
'smtp_timeout' => $team->smtp_timeout, 'use_instance_email_settings' => $team->use_instance_email_settings ?? false,
'resend_enabled' => $team->resend_enabled ?? false,
'use_instance_email_settings' => $team->use_instance_email_settings ?? false, 'resend_api_key' => $team->resend_api_key,
'deployment_success_email_notifications' => $team->smtp_notifications_deployments ?? false,
'resend_enabled' => $team->resend_enabled ?? false, 'deployment_failure_email_notifications' => $team->smtp_notifications_deployments ?? false,
'resend_api_key' => $team->resend_api_key, 'backup_success_email_notifications' => $team->smtp_notifications_database_backups ?? false,
'backup_failure_email_notifications' => $team->smtp_notifications_database_backups ?? false,
'deployment_success_email_notifications' => $team->smtp_notifications_deployments ?? false, 'scheduled_task_success_email_notifications' => $team->smtp_notifications_scheduled_tasks ?? false,
'deployment_failure_email_notifications' => $team->smtp_notifications_deployments ?? true, 'scheduled_task_failure_email_notifications' => $team->smtp_notifications_scheduled_tasks ?? false,
'backup_success_email_notifications' => $team->smtp_notifications_database_backups ?? false, 'status_change_email_notifications' => $team->smtp_notifications_status_changes ?? false,
'backup_failure_email_notifications' => $team->smtp_notifications_database_backups ?? true, 'server_disk_usage_email_notifications' => true,
'scheduled_task_success_email_notifications' => $team->smtp_notifications_scheduled_tasks ?? false, ]);
'scheduled_task_failure_email_notifications' => $team->smtp_notifications_scheduled_tasks ?? true,
'status_change_email_notifications' => $team->smtp_notifications_status_changes ?? false,
'server_disk_usage_email_notifications' => true,
]
);
} }
Schema::table('teams', function (Blueprint $table) { Schema::table('teams', function (Blueprint $table) {
@@ -89,30 +85,29 @@ return new class extends Migration
$table->boolean('smtp_notifications_status_changes')->default(false); $table->boolean('smtp_notifications_status_changes')->default(false);
}); });
$teams = Team::with('emailNotificationSettings')->get(); $settings = DB::table('email_notification_settings')->get();
foreach ($teams as $team) { foreach ($settings as $setting) {
if ($settings = $team->emailNotificationSettings) { DB::table('teams')
$team->update([ ->where('id', $setting->team_id)
'smtp_enabled' => $settings->smtp_enabled, ->update([
'smtp_from_address' => $settings->smtp_from_address, 'smtp_enabled' => $setting->smtp_enabled,
'smtp_from_name' => $settings->smtp_from_name, 'smtp_from_address' => $setting->smtp_from_address,
'smtp_recipients' => $settings->smtp_recipients, 'smtp_from_name' => $setting->smtp_from_name,
'smtp_host' => $settings->smtp_host, 'smtp_recipients' => $setting->smtp_recipients,
'smtp_port' => $settings->smtp_port, 'smtp_host' => $setting->smtp_host,
'smtp_encryption' => $settings->smtp_encryption, 'smtp_port' => $setting->smtp_port,
'smtp_username' => $settings->smtp_username, 'smtp_encryption' => $setting->smtp_encryption,
'smtp_password' => $settings->smtp_password, 'smtp_username' => $setting->smtp_username,
'smtp_timeout' => $settings->smtp_timeout, 'smtp_password' => $setting->smtp_password,
'use_instance_email_settings' => $settings->use_instance_email_settings, 'smtp_timeout' => $setting->smtp_timeout,
'resend_enabled' => $settings->resend_enabled, 'use_instance_email_settings' => $setting->use_instance_email_settings,
'resend_api_key' => $settings->resend_api_key, 'resend_enabled' => $setting->resend_enabled,
'smtp_notifications_deployments' => $settings->deployment_success_email_notifications || $settings->deployment_failure_email_notifications, 'resend_api_key' => $setting->resend_api_key,
'smtp_notifications_database_backups' => $settings->backup_success_email_notifications || $settings->backup_failure_email_notifications, 'smtp_notifications_deployments' => $setting->deployment_success_email_notifications || $setting->deployment_failure_email_notifications,
'smtp_notifications_scheduled_tasks' => $settings->scheduled_task_success_email_notifications || $settings->scheduled_task_failure_email_notifications, 'smtp_notifications_database_backups' => $setting->backup_success_email_notifications || $setting->backup_failure_email_notifications,
'smtp_notifications_status_changes' => $settings->status_change_email_notifications, 'smtp_notifications_scheduled_tasks' => $setting->scheduled_task_success_email_notifications || $setting->scheduled_task_failure_email_notifications,
'smtp_notifications_server_disk_usage' => $settings->server_disk_usage_email_notifications, 'smtp_notifications_status_changes' => $setting->status_change_email_notifications,
]); ]);
}
} }
} }
}; };

View File

@@ -1,8 +1,8 @@
<?php <?php
use App\Models\Team;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
return new class extends Migration return new class extends Migration
@@ -12,24 +12,22 @@ return new class extends Migration
*/ */
public function up(): void public function up(): void
{ {
$teams = Team::all(); $teams = DB::table('teams')->get();
foreach ($teams as $team) {
$team->discordNotificationSettings()->updateOrCreate(
['team_id' => $team->id],
[
'discord_enabled' => $team->discord_enabled ?? false,
'discord_webhook_url' => $team->discord_webhook_url,
'deployment_success_discord_notifications' => $team->discord_notifications_deployments ?? false, foreach ($teams as $team) {
'deployment_failure_discord_notifications' => $team->discord_notifications_deployments ?? true, DB::table('discord_notification_settings')->insert([
'backup_success_discord_notifications' => $team->discord_notifications_database_backups ?? false, 'team_id' => $team->id,
'backup_failure_discord_notifications' => $team->discord_notifications_database_backups ?? true, 'discord_enabled' => $team->discord_enabled ?? false,
'scheduled_task_success_discord_notifications' => $team->discord_notifications_scheduled_tasks ?? false, 'discord_webhook_url' => $team->discord_webhook_url,
'scheduled_task_failure_discord_notifications' => $team->discord_notifications_scheduled_tasks ?? true, 'deployment_success_discord_notifications' => $team->discord_notifications_deployments ?? false,
'status_change_discord_notifications' => $team->discord_notifications_status_changes ?? false, 'deployment_failure_discord_notifications' => $team->discord_notifications_deployments ?? false,
'server_disk_usage_discord_notifications' => $team->discord_notifications_server_disk_usage ?? true, 'backup_success_discord_notifications' => $team->discord_notifications_database_backups ?? false,
] 'backup_failure_discord_notifications' => $team->discord_notifications_database_backups ?? false,
); 'scheduled_task_success_discord_notifications' => $team->discord_notifications_scheduled_tasks ?? false,
'scheduled_task_failure_discord_notifications' => $team->discord_notifications_scheduled_tasks ?? false,
'status_change_discord_notifications' => $team->discord_notifications_status_changes ?? false,
'server_disk_usage_discord_notifications' => $team->discord_notifications_server_disk_usage ?? true,
]);
} }
Schema::table('teams', function (Blueprint $table) { Schema::table('teams', function (Blueprint $table) {
@@ -62,19 +60,19 @@ return new class extends Migration
$table->boolean('discord_notifications_server_disk_usage')->default(true); $table->boolean('discord_notifications_server_disk_usage')->default(true);
}); });
$teams = Team::with('discordNotificationSettings')->get(); $settings = DB::table('discord_notification_settings')->get();
foreach ($teams as $team) { foreach ($settings as $setting) {
if ($settings = $team->discordNotificationSettings) { DB::table('teams')
$team->update([ ->where('id', $setting->team_id)
'discord_enabled' => $settings->discord_enabled, ->update([
'discord_webhook_url' => $settings->discord_webhook_url, 'discord_enabled' => $setting->discord_enabled,
'discord_notifications_deployments' => $settings->deployment_success_discord_notifications || $settings->deployment_failure_discord_notifications, 'discord_webhook_url' => $setting->discord_webhook_url,
'discord_notifications_status_changes' => $settings->status_change_discord_notifications, 'discord_notifications_deployments' => $setting->deployment_success_discord_notifications || $setting->deployment_failure_discord_notifications,
'discord_notifications_database_backups' => $settings->backup_success_discord_notifications || $settings->backup_failure_discord_notifications, 'discord_notifications_status_changes' => $setting->status_change_discord_notifications,
'discord_notifications_scheduled_tasks' => $settings->scheduled_task_success_discord_notifications || $settings->scheduled_task_failure_discord_notifications, 'discord_notifications_database_backups' => $setting->backup_success_discord_notifications || $setting->backup_failure_discord_notifications,
'discord_notifications_server_disk_usage' => $settings->server_disk_usage_discord_notifications, 'discord_notifications_scheduled_tasks' => $setting->scheduled_task_success_discord_notifications || $setting->scheduled_task_failure_discord_notifications,
'discord_notifications_server_disk_usage' => $setting->server_disk_usage_discord_notifications,
]); ]);
}
} }
} }
}; };

View File

@@ -1,46 +1,42 @@
<?php <?php
use App\Models\Team;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
return new class extends Migration return new class extends Migration
{ {
public function up(): void public function up(): void
{ {
$teams = Team::all(); $teams = DB::table('teams')->get();
foreach ($teams as $team) { foreach ($teams as $team) {
DB::table('telegram_notification_settings')->insert([
'team_id' => $team->id,
'telegram_enabled' => $team->telegram_enabled ?? false,
'telegram_token' => $team->telegram_token,
'telegram_chat_id' => $team->telegram_chat_id,
$team->telegramNotificationSettings()->updateOrCreate( 'deployment_success_telegram_notifications' => $team->telegram_notifications_deployments ?? false,
['team_id' => $team->id], 'deployment_failure_telegram_notifications' => $team->telegram_notifications_deployments ?? false,
[ 'backup_success_telegram_notifications' => $team->telegram_notifications_database_backups ?? false,
'telegram_enabled' => $team->telegram_enabled ?? false, 'backup_failure_telegram_notifications' => $team->telegram_notifications_database_backups ?? false,
'telegram_token' => $team->telegram_token, 'scheduled_task_success_telegram_notifications' => $team->telegram_notifications_scheduled_tasks ?? false,
'telegram_chat_id' => $team->telegram_chat_id, 'scheduled_task_failure_telegram_notifications' => $team->telegram_notifications_scheduled_tasks ?? false,
'status_change_telegram_notifications' => $team->telegram_notifications_status_changes ?? false,
'server_disk_usage_telegram_notifications' => $team->telegram_notifications_server_disk_usage ?? true,
'deployment_success_telegram_notifications' => $team->telegram_notifications_deployments ?? false, 'telegram_notifications_deployment_success_topic_id' => $team->telegram_notifications_deployments_message_thread_id,
'deployment_failure_telegram_notifications' => $team->telegram_notifications_deployments ?? true, 'telegram_notifications_deployment_failure_topic_id' => $team->telegram_notifications_deployments_message_thread_id,
'backup_success_telegram_notifications' => $team->telegram_notifications_database_backups ?? false, 'telegram_notifications_backup_success_topic_id' => $team->telegram_notifications_database_backups_message_thread_id,
'backup_failure_telegram_notifications' => $team->telegram_notifications_database_backups ?? true, 'telegram_notifications_backup_failure_topic_id' => $team->telegram_notifications_database_backups_message_thread_id,
'scheduled_task_success_telegram_notifications' => $team->telegram_notifications_scheduled_tasks ?? false, 'telegram_notifications_scheduled_task_success_topic_id' => $team->telegram_notifications_scheduled_tasks_thread_id,
'scheduled_task_failure_telegram_notifications' => $team->telegram_notifications_scheduled_tasks ?? true, 'telegram_notifications_scheduled_task_failure_topic_id' => $team->telegram_notifications_scheduled_tasks_thread_id,
'status_change_telegram_notifications' => $team->telegram_notifications_status_changes ?? false, 'telegram_notifications_status_change_topic_id' => $team->telegram_notifications_status_changes_message_thread_id,
'server_disk_usage_telegram_notifications' => $team->telegram_notifications_server_disk_usage ?? true, ]);
'telegram_notifications_deployment_success_topic_id' => $team->telegram_notifications_deployments_message_thread_id,
'telegram_notifications_deployment_failure_topic_id' => $team->telegram_notifications_deployments_message_thread_id,
'telegram_notifications_backup_success_topic_id' => $team->telegram_notifications_database_backups_message_thread_id,
'telegram_notifications_backup_failure_topic_id' => $team->telegram_notifications_database_backups_message_thread_id,
'telegram_notifications_scheduled_task_success_topic_id' => $team->telegram_notifications_scheduled_tasks_thread_id,
'telegram_notifications_scheduled_task_failure_topic_id' => $team->telegram_notifications_scheduled_tasks_thread_id,
'telegram_notifications_status_change_topic_id' => $team->telegram_notifications_status_changes_message_thread_id,
]
);
} }
// Drop the old columns
Schema::table('teams', function (Blueprint $table) { Schema::table('teams', function (Blueprint $table) {
$table->dropColumn([ $table->dropColumn([
'telegram_enabled', 'telegram_enabled',
@@ -63,7 +59,6 @@ return new class extends Migration
public function down(): void public function down(): void
{ {
// Add back the old columns
Schema::table('teams', function (Blueprint $table) { Schema::table('teams', function (Blueprint $table) {
$table->boolean('telegram_enabled')->default(false); $table->boolean('telegram_enabled')->default(false);
$table->text('telegram_token')->nullable(); $table->text('telegram_token')->nullable();
@@ -81,25 +76,24 @@ return new class extends Migration
$table->text('telegram_notifications_scheduled_tasks_thread_id')->nullable(); $table->text('telegram_notifications_scheduled_tasks_thread_id')->nullable();
}); });
// Migrate data back from the new table to the old columns $settings = DB::table('telegram_notification_settings')->get();
$teams = Team::with('telegramNotificationSettings')->get(); foreach ($settings as $setting) {
foreach ($teams as $team) { DB::table('teams')
if ($settings = $team->telegramNotificationSettings) { ->where('id', $setting->team_id)
$team->update([ ->update([
'telegram_enabled' => $settings->telegram_enabled, 'telegram_enabled' => $setting->telegram_enabled,
'telegram_token' => $settings->telegram_token, 'telegram_token' => $setting->telegram_token,
'telegram_chat_id' => $settings->telegram_chat_id, 'telegram_chat_id' => $setting->telegram_chat_id,
'telegram_notifications_deployments' => $settings->deployment_success_telegram_notifications || $settings->deployment_failure_telegram_notifications, 'telegram_notifications_deployments' => $setting->deployment_success_telegram_notifications || $setting->deployment_failure_telegram_notifications,
'telegram_notifications_status_changes' => $settings->status_change_telegram_notifications, 'telegram_notifications_status_changes' => $setting->status_change_telegram_notifications,
'telegram_notifications_database_backups' => $settings->backup_success_telegram_notifications || $settings->backup_failure_telegram_notifications, 'telegram_notifications_database_backups' => $setting->backup_success_telegram_notifications || $setting->backup_failure_telegram_notifications,
'telegram_notifications_scheduled_tasks' => $settings->scheduled_task_success_telegram_notifications || $settings->scheduled_task_failure_telegram_notifications, 'telegram_notifications_scheduled_tasks' => $setting->scheduled_task_success_telegram_notifications || $setting->scheduled_task_failure_telegram_notifications,
'telegram_notifications_server_disk_usage' => $settings->server_disk_usage_telegram_notifications, 'telegram_notifications_server_disk_usage' => $setting->server_disk_usage_telegram_notifications,
'telegram_notifications_deployments_message_thread_id' => $settings->telegram_notifications_deployment_success_topic_id, 'telegram_notifications_deployments_message_thread_id' => $setting->telegram_notifications_deployment_success_topic_id,
'telegram_notifications_status_changes_message_thread_id' => $settings->telegram_notifications_status_change_topic_id, 'telegram_notifications_status_changes_message_thread_id' => $setting->telegram_notifications_status_change_topic_id,
'telegram_notifications_database_backups_message_thread_id' => $settings->telegram_notifications_backup_success_topic_id, 'telegram_notifications_database_backups_message_thread_id' => $setting->telegram_notifications_backup_success_topic_id,
'telegram_notifications_scheduled_tasks_thread_id' => $settings->telegram_notifications_scheduled_task_success_topic_id, 'telegram_notifications_scheduled_tasks_thread_id' => $setting->telegram_notifications_scheduled_task_success_topic_id,
]); ]);
}
} }
} }
}; };