fix: migrate db schema for smtp + discord

This commit is contained in:
Andras Bacsai
2023-07-27 21:26:15 +02:00
parent d0a85713d2
commit 9c393ff6bc
21 changed files with 382 additions and 238 deletions

View File

@@ -31,4 +31,4 @@ return new class extends Migration
{
Schema::dropIfExists('teams');
}
};
};

View File

@@ -21,8 +21,8 @@ return new class extends Migration
*/
public function down(): void
{
Schema::table('instancesettings', function (Blueprint $table) {
Schema::table('instance_settings', function (Blueprint $table) {
$table->string('wildcard_domain')->nullable();
});
}
};
};

View File

@@ -0,0 +1,193 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use App\Models\Team;
use App\Models\InstanceSettings;
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();
$table->string('smtp_username')->nullable();
$table->string('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();
$table->string('smtp_recipients')->nullable();
$table->string('smtp_host')->nullable();
$table->integer('smtp_port')->nullable();
$table->string('smtp_encryption')->nullable();
$table->string('smtp_username')->nullable();
$table->string('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');
});
}
};