Files
Investidor-V2/database/migrations/2026_09_26_100000_education_intake.php
T
nala 250ac35fd1
tests / ci (push) Canceled after 0s
first commit
2026-09-28 10:01:09 +02:00

55 lines
2.7 KiB
PHP

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
foreach (['labour_demands', 'training_capacities'] as $name) {
Schema::create($name, function (Blueprint $table) use ($name) {
$table->uuid('id')->primary();
$table->foreignUuid('occupation_id')->constrained('occupations')->restrictOnDelete();
$table->foreignUuid('skill_id')->constrained('skills')->restrictOnDelete();
$table->foreignUuid('geo_location_id')->constrained('geo_locations')->restrictOnDelete();
if ($name === 'labour_demands') {
$table->foreignUuid('project_id')->constrained('projects')->restrictOnDelete();
$table->string('employer');
} else {
$table->foreignUuid('course_id')->constrained('courses')->restrictOnDelete();
}
$table->string('qualification');
$table->unsignedInteger('quantity');
$table->date('period_start');
$table->date('period_end');
$table->text('source');
$table->date('reference_date');
$table->date('valid_until');
$table->string('status')->default('submitted');
$table->unsignedInteger('version_no')->default(1);
$table->foreignId('submitted_by')->constrained('users')->restrictOnDelete();
$table->foreignId('reviewed_by')->nullable()->constrained('users')->restrictOnDelete();
$table->text('review_reason')->nullable();
$table->timestampsTz();
$table->softDeletesTz();
$table->index(['status', 'valid_until']);
});
DB::statement("ALTER TABLE {$name} ADD CONSTRAINT {$name}_valid CHECK (quantity > 0 AND version_no > 0 AND period_end >= period_start AND valid_until >= reference_date AND status IN ('submitted','reviewed','rejected') AND (status = 'submitted' OR (reviewed_by IS NOT NULL AND reviewed_by <> submitted_by AND review_reason IS NOT NULL)))");
}
}
public function down(): void
{
foreach (['training_capacities', 'labour_demands'] as $table) {
if (DB::table($table)->exists()) {
throw new RuntimeException('Preserve education submissions and reconcile before rollback.');
}
}
Schema::dropIfExists('training_capacities');
Schema::dropIfExists('labour_demands');
}
};