coolify/database/migrations/2023_07_27_182013_smtp_discord_schemaless_to_normal.php

194 lines
9.4 KiB
PHP
Raw Normal View History

<?php
use App\Models\InstanceSettings;
use App\Models\Team;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
2023-08-11 20:48:52 +02:00
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('teams', function (Blueprint $table) {
$table->boolean('smtp_enabled')->default(false);
$table->string('smtp_from_address')->nullable();
$table->string('smtp_from_name')->nullable();
$table->string('smtp_recipients')->nullable();
$table->string('smtp_host')->nullable();
$table->integer('smtp_port')->nullable();
$table->string('smtp_encryption')->nullable();
2023-07-28 11:15:30 +02:00
$table->text('smtp_username')->nullable();
$table->text('smtp_password')->nullable();
$table->integer('smtp_timeout')->nullable();
$table->boolean('smtp_notifications_test')->default(true);
$table->boolean('smtp_notifications_deployments')->default(false);
$table->boolean('smtp_notifications_status_changes')->default(false);
$table->boolean('discord_enabled')->default(false);
$table->string('discord_webhook_url')->nullable();
$table->boolean('discord_notifications_test')->default(true);
$table->boolean('discord_notifications_deployments')->default(true);
$table->boolean('discord_notifications_status_changes')->default(true);
});
$teams = Team::all();
foreach ($teams as $team) {
$team->smtp_enabled = data_get($team, 'smtp.enabled', false);
$team->smtp_from_address = data_get($team, 'smtp.from_address');
$team->smtp_from_name = data_get($team, 'smtp.from_name');
$team->smtp_recipients = data_get($team, 'smtp.recipients');
$team->smtp_host = data_get($team, 'smtp.host');
$team->smtp_port = data_get($team, 'smtp.port');
$team->smtp_encryption = data_get($team, 'smtp.encryption');
$team->smtp_username = data_get($team, 'smtp.username');
$team->smtp_password = data_get($team, 'smtp.password');
$team->smtp_timeout = data_get($team, 'smtp.timeout');
$team->smtp_notifications_test = data_get($team, 'smtp_notifications.test', true);
$team->smtp_notifications_deployments = data_get($team, 'smtp_notifications.deployments', false);
$team->smtp_notifications_status_changes = data_get($team, 'smtp_notifications.status_changes', false);
$team->discord_enabled = data_get($team, 'discord.enabled', false);
$team->discord_webhook_url = data_get($team, 'discord.webhook_url');
$team->discord_notifications_test = data_get($team, 'discord_notifications.test', true);
$team->discord_notifications_deployments = data_get($team, 'discord_notifications.deployments', true);
$team->discord_notifications_status_changes = data_get($team, 'discord_notifications.status_changes', true);
$team->save();
}
Schema::table('teams', function (Blueprint $table) {
$table->dropColumn('smtp');
$table->dropColumn('smtp_notifications');
$table->dropColumn('discord');
$table->dropColumn('discord_notifications');
});
Schema::table('instance_settings', function (Blueprint $table) {
$table->boolean('smtp_enabled')->default(false);
$table->string('smtp_from_address')->nullable();
$table->string('smtp_from_name')->nullable();
2023-07-28 11:15:30 +02:00
$table->text('smtp_recipients')->nullable();
$table->string('smtp_host')->nullable();
$table->integer('smtp_port')->nullable();
$table->string('smtp_encryption')->nullable();
2023-07-28 11:15:30 +02:00
$table->text('smtp_username')->nullable();
$table->text('smtp_password')->nullable();
$table->integer('smtp_timeout')->nullable();
});
$instance_settings = InstanceSettings::all();
foreach ($instance_settings as $instance_setting) {
$instance_setting->smtp_enabled = data_get($instance_setting, 'smtp.enabled', false);
$instance_setting->smtp_from_address = data_get($instance_setting, 'smtp.from_address');
$instance_setting->smtp_from_name = data_get($instance_setting, 'smtp.from_name');
$instance_setting->smtp_recipients = data_get($instance_setting, 'smtp.recipients');
$instance_setting->smtp_host = data_get($instance_setting, 'smtp.host');
$instance_setting->smtp_port = data_get($instance_setting, 'smtp.port');
$instance_setting->smtp_encryption = data_get($instance_setting, 'smtp.encryption');
$instance_setting->smtp_username = data_get($instance_setting, 'smtp.username');
$instance_setting->smtp_password = data_get($instance_setting, 'smtp.password');
$instance_setting->smtp_timeout = data_get($instance_setting, 'smtp.timeout');
$instance_setting->save();
}
Schema::table('instance_settings', function (Blueprint $table) {
$table->dropColumn('smtp');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('teams', function (Blueprint $table) {
$table->schemalessAttributes('smtp');
$table->schemalessAttributes('smtp_notifications');
$table->schemalessAttributes('discord');
$table->schemalessAttributes('discord_notifications');
});
$teams = Team::all();
foreach ($teams as $team) {
$team->smtp = [
'enabled' => $team->smtp_enabled,
'from_address' => $team->smtp_from_address,
'from_name' => $team->smtp_from_name,
'recipients' => $team->smtp_recipients,
'host' => $team->smtp_host,
'port' => $team->smtp_port,
'encryption' => $team->smtp_encryption,
'username' => $team->smtp_username,
'password' => $team->smtp_password,
'timeout' => $team->smtp_timeout,
];
$team->smtp_notifications = [
'test' => $team->smtp_notifications_test,
'deployments' => $team->smtp_notifications_deployments,
'status_changes' => $team->smtp_notifications_status_changes,
];
$team->discord = [
'enabled' => $team->discord_enabled,
'webhook_url' => $team->discord_webhook_url,
];
$team->discord_notifications = [
'test' => $team->discord_notifications_test,
'deployments' => $team->discord_notifications_deployments,
'status_changes' => $team->discord_notifications_status_changes,
];
$team->save();
}
Schema::table('teams', function (Blueprint $table) {
$table->dropColumn('smtp_enabled');
$table->dropColumn('smtp_from_address');
$table->dropColumn('smtp_from_name');
$table->dropColumn('smtp_recipients');
$table->dropColumn('smtp_host');
$table->dropColumn('smtp_port');
$table->dropColumn('smtp_encryption');
$table->dropColumn('smtp_username');
$table->dropColumn('smtp_password');
$table->dropColumn('smtp_timeout');
$table->dropColumn('smtp_notifications_test');
$table->dropColumn('smtp_notifications_deployments');
$table->dropColumn('smtp_notifications_status_changes');
$table->dropColumn('discord_enabled');
$table->dropColumn('discord_webhook_url');
$table->dropColumn('discord_notifications_test');
$table->dropColumn('discord_notifications_deployments');
$table->dropColumn('discord_notifications_status_changes');
});
Schema::table('instance_settings', function (Blueprint $table) {
$table->schemalessAttributes('smtp');
});
$instance_setting = InstanceSettings::get();
$instance_setting->smtp = [
'enabled' => $instance_setting->smtp_enabled,
'from_address' => $instance_setting->smtp_from_address,
'from_name' => $instance_setting->smtp_from_name,
'recipients' => $instance_setting->smtp_recipients,
'host' => $instance_setting->smtp_host,
'port' => $instance_setting->smtp_port,
'encryption' => $instance_setting->smtp_encryption,
'username' => $instance_setting->smtp_username,
'password' => $instance_setting->smtp_password,
'timeout' => $instance_setting->smtp_timeout,
];
$instance_setting->save();
Schema::table('instance_settings', function (Blueprint $table) {
$table->dropColumn('smtp_enabled');
$table->dropColumn('smtp_from_address');
$table->dropColumn('smtp_from_name');
$table->dropColumn('smtp_recipients');
$table->dropColumn('smtp_host');
$table->dropColumn('smtp_port');
$table->dropColumn('smtp_encryption');
$table->dropColumn('smtp_username');
$table->dropColumn('smtp_password');
$table->dropColumn('smtp_timeout');
});
}
};