clrghouz/database/migrations/2023_07_06_204740_system_mailer.php

90 lines
2.3 KiB
PHP

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('mailers',function (Blueprint $table) {
$table->id();
$table->string('name')->unqiue();
$table->integer('priority')->unsigned()->unique();
});
Schema::create('mailer_system',function (Blueprint $table) {
$table->integer('port')->unsigned();
$table->dateTime('last_poll')->nullable();
$table->boolean('active');
$table->integer('attempts')->unsigned()->nullable();
$table->bigInteger('system_id');
$table->foreign('system_id')->references('id')->on('systems');
$table->bigInteger('mailer_id');
$table->foreign('mailer_id')->references('id')->on('mailers');
$table->unique(['system_id','mailer_id']);
$table->unique(['system_id','port']);
});
Schema::table('systems',function (Blueprint $table) {
$table->dropUnique(['mailer_type','mailer_address','mailer_port']);
});
$binkp = new \App\Models\Mailer;
$binkp->name = 'BINKP';
$binkp->priority = 1;
$binkp->save();
$emsi = new \App\Models\Mailer;
$emsi->name = 'EMSI';
$emsi->priority = 2;
$emsi->save();
foreach (\App\Models\System::whereNotNull('mailer_address')->cursor() as $o) {
if ($o->mailer_type & \App\Models\Setup::O_BINKP)
$type = $binkp;
elseif ($o->mailer_type & \App\Models\Setup::O_EMSI)
$type = $emsi;
else
$type = NULL;
if (! $type)
abort(500,sprintf('No mailer type [%d] :',$o->mailer_type));
$o->mailers()->sync([$type->id=>[
'port'=>$o->mailer_port,
'active'=>TRUE,
]]);
$o->address = $o->mailer_address;
$o->mailer_port = null;
$o->mailer_type = null;
$o->mailer_address = null;
$o->save();
}
Schema::table('systems',function (Blueprint $table) {
$table->dropColumn(['mailer_type','mailer_address','mailer_port']);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
abort(500,'Cant go back');
Schema::dropIfExists('mailer_system');
Schema::dropIfExists('mailers');
Schema::table('systems',function (Blueprint $table) {
$table->unique(['mailer_type','mailer_address','mailer_port']);
});
}
};