From 4ff317001dad6944eb02e60abaa8893be36995de Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Fri, 6 Dec 2024 15:19:31 +0100 Subject: [PATCH] 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 --- ...notification_settings_from_teams_table.php | 103 +++++++++--------- ...notification_settings_from_teams_table.php | 58 +++++----- ...notification_settings_from_teams_table.php | 86 +++++++-------- 3 files changed, 117 insertions(+), 130 deletions(-) diff --git a/database/migrations/2024_12_05_212546_migrate_email_notification_settings_from_teams_table.php b/database/migrations/2024_12_05_212546_migrate_email_notification_settings_from_teams_table.php index 737c0bab6..d835ec2ed 100644 --- a/database/migrations/2024_12_05_212546_migrate_email_notification_settings_from_teams_table.php +++ b/database/migrations/2024_12_05_212546_migrate_email_notification_settings_from_teams_table.php @@ -1,45 +1,41 @@ get(); + foreach ($teams as $team) { - $team->emailNotificationSettings()->updateOrCreate( - ['team_id' => $team->id], - [ - 'smtp_enabled' => $team->smtp_enabled ?? false, - 'smtp_from_address' => $team->smtp_from_address, - 'smtp_from_name' => $team->smtp_from_name, - 'smtp_recipients' => $team->smtp_recipients, - 'smtp_host' => $team->smtp_host, - 'smtp_port' => $team->smtp_port, - 'smtp_encryption' => $team->smtp_encryption, - 'smtp_username' => $team->smtp_username, - 'smtp_password' => $team->smtp_password, - 'smtp_timeout' => $team->smtp_timeout, - - 'use_instance_email_settings' => $team->use_instance_email_settings ?? false, - - 'resend_enabled' => $team->resend_enabled ?? false, - 'resend_api_key' => $team->resend_api_key, - - 'deployment_success_email_notifications' => $team->smtp_notifications_deployments ?? false, - 'deployment_failure_email_notifications' => $team->smtp_notifications_deployments ?? true, - 'backup_success_email_notifications' => $team->smtp_notifications_database_backups ?? false, - 'backup_failure_email_notifications' => $team->smtp_notifications_database_backups ?? 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, - ] - ); + DB::table('email_notification_settings')->insert([ + 'team_id' => $team->id, + 'smtp_enabled' => $team->smtp_enabled ?? false, + 'smtp_from_address' => $team->smtp_from_address, + 'smtp_from_name' => $team->smtp_from_name, + 'smtp_recipients' => $team->smtp_recipients, + 'smtp_host' => $team->smtp_host, + 'smtp_port' => $team->smtp_port, + 'smtp_encryption' => $team->smtp_encryption, + 'smtp_username' => $team->smtp_username, + 'smtp_password' => $team->smtp_password, + 'smtp_timeout' => $team->smtp_timeout, + 'use_instance_email_settings' => $team->use_instance_email_settings ?? false, + 'resend_enabled' => $team->resend_enabled ?? false, + 'resend_api_key' => $team->resend_api_key, + 'deployment_success_email_notifications' => $team->smtp_notifications_deployments ?? false, + 'deployment_failure_email_notifications' => $team->smtp_notifications_deployments ?? false, + 'backup_success_email_notifications' => $team->smtp_notifications_database_backups ?? false, + 'backup_failure_email_notifications' => $team->smtp_notifications_database_backups ?? false, + 'scheduled_task_success_email_notifications' => $team->smtp_notifications_scheduled_tasks ?? false, + 'scheduled_task_failure_email_notifications' => $team->smtp_notifications_scheduled_tasks ?? false, + 'status_change_email_notifications' => $team->smtp_notifications_status_changes ?? false, + 'server_disk_usage_email_notifications' => true, + ]); } Schema::table('teams', function (Blueprint $table) { @@ -89,30 +85,29 @@ return new class extends Migration $table->boolean('smtp_notifications_status_changes')->default(false); }); - $teams = Team::with('emailNotificationSettings')->get(); - foreach ($teams as $team) { - if ($settings = $team->emailNotificationSettings) { - $team->update([ - 'smtp_enabled' => $settings->smtp_enabled, - 'smtp_from_address' => $settings->smtp_from_address, - 'smtp_from_name' => $settings->smtp_from_name, - 'smtp_recipients' => $settings->smtp_recipients, - 'smtp_host' => $settings->smtp_host, - 'smtp_port' => $settings->smtp_port, - 'smtp_encryption' => $settings->smtp_encryption, - 'smtp_username' => $settings->smtp_username, - 'smtp_password' => $settings->smtp_password, - 'smtp_timeout' => $settings->smtp_timeout, - 'use_instance_email_settings' => $settings->use_instance_email_settings, - 'resend_enabled' => $settings->resend_enabled, - 'resend_api_key' => $settings->resend_api_key, - 'smtp_notifications_deployments' => $settings->deployment_success_email_notifications || $settings->deployment_failure_email_notifications, - 'smtp_notifications_database_backups' => $settings->backup_success_email_notifications || $settings->backup_failure_email_notifications, - 'smtp_notifications_scheduled_tasks' => $settings->scheduled_task_success_email_notifications || $settings->scheduled_task_failure_email_notifications, - 'smtp_notifications_status_changes' => $settings->status_change_email_notifications, - 'smtp_notifications_server_disk_usage' => $settings->server_disk_usage_email_notifications, + $settings = DB::table('email_notification_settings')->get(); + foreach ($settings as $setting) { + DB::table('teams') + ->where('id', $setting->team_id) + ->update([ + 'smtp_enabled' => $setting->smtp_enabled, + 'smtp_from_address' => $setting->smtp_from_address, + 'smtp_from_name' => $setting->smtp_from_name, + 'smtp_recipients' => $setting->smtp_recipients, + 'smtp_host' => $setting->smtp_host, + 'smtp_port' => $setting->smtp_port, + 'smtp_encryption' => $setting->smtp_encryption, + 'smtp_username' => $setting->smtp_username, + 'smtp_password' => $setting->smtp_password, + 'smtp_timeout' => $setting->smtp_timeout, + 'use_instance_email_settings' => $setting->use_instance_email_settings, + 'resend_enabled' => $setting->resend_enabled, + 'resend_api_key' => $setting->resend_api_key, + 'smtp_notifications_deployments' => $setting->deployment_success_email_notifications || $setting->deployment_failure_email_notifications, + 'smtp_notifications_database_backups' => $setting->backup_success_email_notifications || $setting->backup_failure_email_notifications, + 'smtp_notifications_scheduled_tasks' => $setting->scheduled_task_success_email_notifications || $setting->scheduled_task_failure_email_notifications, + 'smtp_notifications_status_changes' => $setting->status_change_email_notifications, ]); - } } } }; diff --git a/database/migrations/2024_12_05_212631_migrate_discord_notification_settings_from_teams_table.php b/database/migrations/2024_12_05_212631_migrate_discord_notification_settings_from_teams_table.php index efb89b09a..72d56ac08 100644 --- a/database/migrations/2024_12_05_212631_migrate_discord_notification_settings_from_teams_table.php +++ b/database/migrations/2024_12_05_212631_migrate_discord_notification_settings_from_teams_table.php @@ -1,8 +1,8 @@ discordNotificationSettings()->updateOrCreate( - ['team_id' => $team->id], - [ - 'discord_enabled' => $team->discord_enabled ?? false, - 'discord_webhook_url' => $team->discord_webhook_url, + $teams = DB::table('teams')->get(); - 'deployment_success_discord_notifications' => $team->discord_notifications_deployments ?? false, - 'deployment_failure_discord_notifications' => $team->discord_notifications_deployments ?? true, - 'backup_success_discord_notifications' => $team->discord_notifications_database_backups ?? false, - 'backup_failure_discord_notifications' => $team->discord_notifications_database_backups ?? true, - 'scheduled_task_success_discord_notifications' => $team->discord_notifications_scheduled_tasks ?? false, - 'scheduled_task_failure_discord_notifications' => $team->discord_notifications_scheduled_tasks ?? true, - 'status_change_discord_notifications' => $team->discord_notifications_status_changes ?? false, - 'server_disk_usage_discord_notifications' => $team->discord_notifications_server_disk_usage ?? true, - ] - ); + foreach ($teams as $team) { + DB::table('discord_notification_settings')->insert([ + '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, + 'deployment_failure_discord_notifications' => $team->discord_notifications_deployments ?? false, + '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) { @@ -62,19 +60,19 @@ return new class extends Migration $table->boolean('discord_notifications_server_disk_usage')->default(true); }); - $teams = Team::with('discordNotificationSettings')->get(); - foreach ($teams as $team) { - if ($settings = $team->discordNotificationSettings) { - $team->update([ - 'discord_enabled' => $settings->discord_enabled, - 'discord_webhook_url' => $settings->discord_webhook_url, - 'discord_notifications_deployments' => $settings->deployment_success_discord_notifications || $settings->deployment_failure_discord_notifications, - 'discord_notifications_status_changes' => $settings->status_change_discord_notifications, - 'discord_notifications_database_backups' => $settings->backup_success_discord_notifications || $settings->backup_failure_discord_notifications, - 'discord_notifications_scheduled_tasks' => $settings->scheduled_task_success_discord_notifications || $settings->scheduled_task_failure_discord_notifications, - 'discord_notifications_server_disk_usage' => $settings->server_disk_usage_discord_notifications, + $settings = DB::table('discord_notification_settings')->get(); + foreach ($settings as $setting) { + DB::table('teams') + ->where('id', $setting->team_id) + ->update([ + 'discord_enabled' => $setting->discord_enabled, + 'discord_webhook_url' => $setting->discord_webhook_url, + 'discord_notifications_deployments' => $setting->deployment_success_discord_notifications || $setting->deployment_failure_discord_notifications, + 'discord_notifications_status_changes' => $setting->status_change_discord_notifications, + 'discord_notifications_database_backups' => $setting->backup_success_discord_notifications || $setting->backup_failure_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, ]); - } } } }; diff --git a/database/migrations/2024_12_05_212705_migrate_telegram_notification_settings_from_teams_table.php b/database/migrations/2024_12_05_212705_migrate_telegram_notification_settings_from_teams_table.php index 6796a18cb..82e928649 100644 --- a/database/migrations/2024_12_05_212705_migrate_telegram_notification_settings_from_teams_table.php +++ b/database/migrations/2024_12_05_212705_migrate_telegram_notification_settings_from_teams_table.php @@ -1,46 +1,42 @@ get(); 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( - ['team_id' => $team->id], - [ - 'telegram_enabled' => $team->telegram_enabled ?? false, - 'telegram_token' => $team->telegram_token, - 'telegram_chat_id' => $team->telegram_chat_id, + 'deployment_success_telegram_notifications' => $team->telegram_notifications_deployments ?? false, + 'deployment_failure_telegram_notifications' => $team->telegram_notifications_deployments ?? false, + 'backup_success_telegram_notifications' => $team->telegram_notifications_database_backups ?? false, + 'backup_failure_telegram_notifications' => $team->telegram_notifications_database_backups ?? false, + 'scheduled_task_success_telegram_notifications' => $team->telegram_notifications_scheduled_tasks ?? false, + '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, - 'deployment_failure_telegram_notifications' => $team->telegram_notifications_deployments ?? true, - 'backup_success_telegram_notifications' => $team->telegram_notifications_database_backups ?? false, - 'backup_failure_telegram_notifications' => $team->telegram_notifications_database_backups ?? true, - 'scheduled_task_success_telegram_notifications' => $team->telegram_notifications_scheduled_tasks ?? false, - 'scheduled_task_failure_telegram_notifications' => $team->telegram_notifications_scheduled_tasks ?? true, - 'status_change_telegram_notifications' => $team->telegram_notifications_status_changes ?? false, - '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, - ] - ); + '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) { $table->dropColumn([ 'telegram_enabled', @@ -63,7 +59,6 @@ return new class extends Migration public function down(): void { - // Add back the old columns Schema::table('teams', function (Blueprint $table) { $table->boolean('telegram_enabled')->default(false); $table->text('telegram_token')->nullable(); @@ -81,25 +76,24 @@ return new class extends Migration $table->text('telegram_notifications_scheduled_tasks_thread_id')->nullable(); }); - // Migrate data back from the new table to the old columns - $teams = Team::with('telegramNotificationSettings')->get(); - foreach ($teams as $team) { - if ($settings = $team->telegramNotificationSettings) { - $team->update([ - 'telegram_enabled' => $settings->telegram_enabled, - 'telegram_token' => $settings->telegram_token, - 'telegram_chat_id' => $settings->telegram_chat_id, - 'telegram_notifications_deployments' => $settings->deployment_success_telegram_notifications || $settings->deployment_failure_telegram_notifications, - 'telegram_notifications_status_changes' => $settings->status_change_telegram_notifications, - 'telegram_notifications_database_backups' => $settings->backup_success_telegram_notifications || $settings->backup_failure_telegram_notifications, - 'telegram_notifications_scheduled_tasks' => $settings->scheduled_task_success_telegram_notifications || $settings->scheduled_task_failure_telegram_notifications, - 'telegram_notifications_server_disk_usage' => $settings->server_disk_usage_telegram_notifications, - 'telegram_notifications_deployments_message_thread_id' => $settings->telegram_notifications_deployment_success_topic_id, - 'telegram_notifications_status_changes_message_thread_id' => $settings->telegram_notifications_status_change_topic_id, - 'telegram_notifications_database_backups_message_thread_id' => $settings->telegram_notifications_backup_success_topic_id, - 'telegram_notifications_scheduled_tasks_thread_id' => $settings->telegram_notifications_scheduled_task_success_topic_id, + $settings = DB::table('telegram_notification_settings')->get(); + foreach ($settings as $setting) { + DB::table('teams') + ->where('id', $setting->team_id) + ->update([ + 'telegram_enabled' => $setting->telegram_enabled, + 'telegram_token' => $setting->telegram_token, + 'telegram_chat_id' => $setting->telegram_chat_id, + 'telegram_notifications_deployments' => $setting->deployment_success_telegram_notifications || $setting->deployment_failure_telegram_notifications, + 'telegram_notifications_status_changes' => $setting->status_change_telegram_notifications, + 'telegram_notifications_database_backups' => $setting->backup_success_telegram_notifications || $setting->backup_failure_telegram_notifications, + 'telegram_notifications_scheduled_tasks' => $setting->scheduled_task_success_telegram_notifications || $setting->scheduled_task_failure_telegram_notifications, + 'telegram_notifications_server_disk_usage' => $setting->server_disk_usage_telegram_notifications, + 'telegram_notifications_deployments_message_thread_id' => $setting->telegram_notifications_deployment_success_topic_id, + 'telegram_notifications_status_changes_message_thread_id' => $setting->telegram_notifications_status_change_topic_id, + 'telegram_notifications_database_backups_message_thread_id' => $setting->telegram_notifications_backup_success_topic_id, + 'telegram_notifications_scheduled_tasks_thread_id' => $setting->telegram_notifications_scheduled_task_success_topic_id, ]); - } } } };