diff --git a/app/app/Models/Activity.php b/app/app/Models/Activity.php index d0779b4..ac30358 100644 --- a/app/app/Models/Activity.php +++ b/app/app/Models/Activity.php @@ -2,13 +2,14 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Concerns\HasUuids; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; class Activity extends Model { - use HasFactory; + use HasFactory, HasUuids; protected $fillable = [ 'user_id', 'type', 'level', diff --git a/app/app/Models/Backup.php b/app/app/Models/Backup.php index 57a8dac..5f9c42d 100644 --- a/app/app/Models/Backup.php +++ b/app/app/Models/Backup.php @@ -2,13 +2,14 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Concerns\HasUuids; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; class Backup extends Model { - use HasFactory; + use HasFactory, HasUuids; protected $fillable = [ 'site_id', 'type', 'size_bytes', 'status', diff --git a/app/app/Models/Certificate.php b/app/app/Models/Certificate.php index f4cb077..0386551 100644 --- a/app/app/Models/Certificate.php +++ b/app/app/Models/Certificate.php @@ -2,13 +2,14 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Concerns\HasUuids; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; class Certificate extends Model { - use HasFactory; + use HasFactory, HasUuids; protected $fillable = [ 'site_id', 'domain', 'issuer', diff --git a/app/app/Models/Cluster.php b/app/app/Models/Cluster.php index b87e607..65501a4 100644 --- a/app/app/Models/Cluster.php +++ b/app/app/Models/Cluster.php @@ -2,13 +2,14 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Concerns\HasUuids; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; class Cluster extends Model { - use HasFactory; + use HasFactory, HasUuids; protected $fillable = [ 'name', 'slug', 'region', 'env', 'monthly_price_cents', diff --git a/app/app/Models/Cron.php b/app/app/Models/Cron.php index fa8a716..07ad420 100644 --- a/app/app/Models/Cron.php +++ b/app/app/Models/Cron.php @@ -2,13 +2,14 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Concerns\HasUuids; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; class Cron extends Model { - use HasFactory; + use HasFactory, HasUuids; protected $fillable = [ 'site_id', 'name', 'expression', 'command', diff --git a/app/app/Models/Invitation.php b/app/app/Models/Invitation.php index 5bf6177..a69ba2d 100644 --- a/app/app/Models/Invitation.php +++ b/app/app/Models/Invitation.php @@ -2,6 +2,7 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Concerns\HasUuids; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -9,7 +10,7 @@ use Illuminate\Support\Str; class Invitation extends Model { - use HasFactory; + use HasFactory, HasUuids; protected $fillable = [ 'email', 'role', 'invited_by_user_id', diff --git a/app/app/Models/SecurityEvent.php b/app/app/Models/SecurityEvent.php index 46cab08..05a163b 100644 --- a/app/app/Models/SecurityEvent.php +++ b/app/app/Models/SecurityEvent.php @@ -2,13 +2,14 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Concerns\HasUuids; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; class SecurityEvent extends Model { - use HasFactory; + use HasFactory, HasUuids; protected $fillable = [ 'site_id', 'type', 'severity', 'blocked', diff --git a/app/app/Models/Server.php b/app/app/Models/Server.php index 236ab2a..0b59487 100644 --- a/app/app/Models/Server.php +++ b/app/app/Models/Server.php @@ -2,6 +2,7 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Concerns\HasUuids; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -9,7 +10,7 @@ use Illuminate\Database\Eloquent\Relations\HasMany; class Server extends Model { - use HasFactory; + use HasFactory, HasUuids; protected $fillable = [ 'cluster_id', 'name', 'region', 'country_flag', 'env', diff --git a/app/app/Models/Site.php b/app/app/Models/Site.php index 01f0c66..f63cd28 100644 --- a/app/app/Models/Site.php +++ b/app/app/Models/Site.php @@ -2,6 +2,7 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Concerns\HasUuids; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -10,7 +11,7 @@ use Illuminate\Database\Eloquent\Relations\HasOne; class Site extends Model { - use HasFactory; + use HasFactory, HasUuids; protected $fillable = [ 'server_id', 'domain', 'name', diff --git a/app/app/Models/TeamMember.php b/app/app/Models/TeamMember.php index d2cf8eb..c740f12 100644 --- a/app/app/Models/TeamMember.php +++ b/app/app/Models/TeamMember.php @@ -2,13 +2,14 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Concerns\HasUuids; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; class TeamMember extends Model { - use HasFactory; + use HasFactory, HasUuids; protected $fillable = [ 'user_id', 'role', 'scope', 'two_fa_enabled', 'last_active_at', diff --git a/app/app/Models/User.php b/app/app/Models/User.php index 68f3a66..d2d2e04 100644 --- a/app/app/Models/User.php +++ b/app/app/Models/User.php @@ -4,6 +4,7 @@ namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Database\Factories\UserFactory; +use Illuminate\Database\Eloquent\Concerns\HasUuids; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; @@ -11,7 +12,7 @@ use Illuminate\Notifications\Notifiable; class User extends Authenticatable { /** @use HasFactory */ - use HasFactory, Notifiable; + use HasFactory, HasUuids, Notifiable; /** * The attributes that are mass assignable. diff --git a/app/database/migrations/0001_01_01_000000_create_users_table.php b/app/database/migrations/0001_01_01_000000_create_users_table.php index 05fb5d9..e8a4530 100644 --- a/app/database/migrations/0001_01_01_000000_create_users_table.php +++ b/app/database/migrations/0001_01_01_000000_create_users_table.php @@ -12,7 +12,7 @@ return new class extends Migration public function up(): void { Schema::create('users', function (Blueprint $table) { - $table->id(); + $table->uuid('id')->primary(); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); @@ -29,7 +29,7 @@ return new class extends Migration Schema::create('sessions', function (Blueprint $table) { $table->string('id')->primary(); - $table->foreignId('user_id')->nullable()->index(); + $table->foreignUuid('user_id')->nullable()->index(); $table->string('ip_address', 45)->nullable(); $table->text('user_agent')->nullable(); $table->longText('payload'); diff --git a/app/database/migrations/0001_01_01_000002_create_jobs_table.php b/app/database/migrations/0001_01_01_000002_create_jobs_table.php index 425e705..9be52b9 100644 --- a/app/database/migrations/0001_01_01_000002_create_jobs_table.php +++ b/app/database/migrations/0001_01_01_000002_create_jobs_table.php @@ -12,7 +12,7 @@ return new class extends Migration public function up(): void { Schema::create('jobs', function (Blueprint $table) { - $table->id(); + $table->uuid('id')->primary(); $table->string('queue')->index(); $table->longText('payload'); $table->unsignedTinyInteger('attempts'); @@ -35,7 +35,7 @@ return new class extends Migration }); Schema::create('failed_jobs', function (Blueprint $table) { - $table->id(); + $table->uuid('id')->primary(); $table->string('uuid')->unique(); $table->text('connection'); $table->text('queue'); diff --git a/app/database/migrations/2026_05_31_200000_create_clusters_table.php b/app/database/migrations/2026_05_31_200000_create_clusters_table.php index b0b9c7f..b0c5d64 100644 --- a/app/database/migrations/2026_05_31_200000_create_clusters_table.php +++ b/app/database/migrations/2026_05_31_200000_create_clusters_table.php @@ -8,7 +8,7 @@ return new class extends Migration { public function up(): void { Schema::create('clusters', function (Blueprint $table) { - $table->id(); + $table->uuid('id')->primary(); $table->string('name'); $table->string('slug')->unique(); $table->string('region', 32); // e.g. eu-central-1 diff --git a/app/database/migrations/2026_05_31_200001_create_servers_table.php b/app/database/migrations/2026_05_31_200001_create_servers_table.php index 3fb1862..fe6c779 100644 --- a/app/database/migrations/2026_05_31_200001_create_servers_table.php +++ b/app/database/migrations/2026_05_31_200001_create_servers_table.php @@ -8,8 +8,8 @@ return new class extends Migration { public function up(): void { Schema::create('servers', function (Blueprint $table) { - $table->id(); - $table->foreignId('cluster_id')->nullable()->constrained()->nullOnDelete(); + $table->uuid('id')->primary(); + $table->foreignUuid('cluster_id')->nullable()->constrained()->nullOnDelete(); $table->string('name', 64); // eu-prod-01 $table->string('region', 32); // eu-central-1 $table->string('country_flag', 4)->default('🇩🇪'); // emoji diff --git a/app/database/migrations/2026_05_31_200002_create_sites_table.php b/app/database/migrations/2026_05_31_200002_create_sites_table.php index 7289bc8..3c187fd 100644 --- a/app/database/migrations/2026_05_31_200002_create_sites_table.php +++ b/app/database/migrations/2026_05_31_200002_create_sites_table.php @@ -8,8 +8,8 @@ return new class extends Migration { public function up(): void { Schema::create('sites', function (Blueprint $table) { - $table->id(); - $table->foreignId('server_id')->constrained()->cascadeOnDelete(); + $table->uuid('id')->primary(); + $table->foreignUuid('server_id')->constrained()->cascadeOnDelete(); $table->string('domain')->unique(); $table->string('name')->nullable(); $table->string('wp_version', 16)->default('6.4'); diff --git a/app/database/migrations/2026_05_31_200003_create_backups_table.php b/app/database/migrations/2026_05_31_200003_create_backups_table.php index 35488f5..7d57467 100644 --- a/app/database/migrations/2026_05_31_200003_create_backups_table.php +++ b/app/database/migrations/2026_05_31_200003_create_backups_table.php @@ -8,8 +8,8 @@ return new class extends Migration { public function up(): void { Schema::create('backups', function (Blueprint $table) { - $table->id(); - $table->foreignId('site_id')->constrained()->cascadeOnDelete(); + $table->uuid('id')->primary(); + $table->foreignUuid('site_id')->constrained()->cascadeOnDelete(); $table->enum('type', ['hourly', 'daily', 'manual', 'snapshot'])->default('daily'); $table->unsignedBigInteger('size_bytes')->default(0); $table->enum('status', ['queued', 'running', 'ok', 'failed'])->default('queued'); diff --git a/app/database/migrations/2026_05_31_200004_create_team_members_table.php b/app/database/migrations/2026_05_31_200004_create_team_members_table.php index d7ef4e4..a7b5412 100644 --- a/app/database/migrations/2026_05_31_200004_create_team_members_table.php +++ b/app/database/migrations/2026_05_31_200004_create_team_members_table.php @@ -8,8 +8,8 @@ return new class extends Migration { public function up(): void { Schema::create('team_members', function (Blueprint $table) { - $table->id(); - $table->foreignId('user_id')->constrained()->cascadeOnDelete(); + $table->uuid('id')->primary(); + $table->foreignUuid('user_id')->constrained()->cascadeOnDelete(); $table->enum('role', ['owner', 'admin', 'developer', 'viewer'])->default('viewer'); $table->string('scope')->nullable(); // e.g. "All clusters", "eu-prod-*" $table->boolean('two_fa_enabled')->default(false); diff --git a/app/database/migrations/2026_05_31_200005_create_invitations_table.php b/app/database/migrations/2026_05_31_200005_create_invitations_table.php index 815ac36..e2acdc0 100644 --- a/app/database/migrations/2026_05_31_200005_create_invitations_table.php +++ b/app/database/migrations/2026_05_31_200005_create_invitations_table.php @@ -8,10 +8,10 @@ return new class extends Migration { public function up(): void { Schema::create('invitations', function (Blueprint $table) { - $table->id(); + $table->uuid('id')->primary(); $table->string('email'); $table->enum('role', ['admin', 'developer', 'viewer'])->default('developer'); - $table->foreignId('invited_by_user_id')->nullable()->constrained('users')->nullOnDelete(); + $table->foreignUuid('invited_by_user_id')->nullable()->constrained('users')->nullOnDelete(); $table->string('token', 64)->unique(); $table->timestamp('sent_at')->nullable(); $table->timestamp('accepted_at')->nullable(); diff --git a/app/database/migrations/2026_05_31_200006_create_security_events_table.php b/app/database/migrations/2026_05_31_200006_create_security_events_table.php index a1ac6e5..4c50da5 100644 --- a/app/database/migrations/2026_05_31_200006_create_security_events_table.php +++ b/app/database/migrations/2026_05_31_200006_create_security_events_table.php @@ -8,8 +8,8 @@ return new class extends Migration { public function up(): void { Schema::create('security_events', function (Blueprint $table) { - $table->id(); - $table->foreignId('site_id')->nullable()->constrained()->cascadeOnDelete(); + $table->uuid('id')->primary(); + $table->foreignUuid('site_id')->nullable()->constrained()->cascadeOnDelete(); $table->enum('type', ['brute_force', 'tor_exit', 'malware', 'cert_expiring', 'firewall', 'scan']) ->default('firewall'); $table->enum('severity', ['info', 'low', 'medium', 'high', 'critical'])->default('low'); diff --git a/app/database/migrations/2026_05_31_200007_create_certificates_table.php b/app/database/migrations/2026_05_31_200007_create_certificates_table.php index a4616c0..86f2891 100644 --- a/app/database/migrations/2026_05_31_200007_create_certificates_table.php +++ b/app/database/migrations/2026_05_31_200007_create_certificates_table.php @@ -8,8 +8,8 @@ return new class extends Migration { public function up(): void { Schema::create('certificates', function (Blueprint $table) { - $table->id(); - $table->foreignId('site_id')->constrained()->cascadeOnDelete(); + $table->uuid('id')->primary(); + $table->foreignUuid('site_id')->constrained()->cascadeOnDelete(); $table->string('domain'); $table->string('issuer', 64)->default("Let's Encrypt"); $table->timestamp('issued_at')->nullable(); diff --git a/app/database/migrations/2026_05_31_200008_create_activities_table.php b/app/database/migrations/2026_05_31_200008_create_activities_table.php index 93b3138..4c9be7d 100644 --- a/app/database/migrations/2026_05_31_200008_create_activities_table.php +++ b/app/database/migrations/2026_05_31_200008_create_activities_table.php @@ -8,8 +8,8 @@ return new class extends Migration { public function up(): void { Schema::create('activities', function (Blueprint $table) { - $table->id(); - $table->foreignId('user_id')->nullable()->constrained()->nullOnDelete(); + $table->uuid('id')->primary(); + $table->foreignUuid('user_id')->nullable()->constrained()->nullOnDelete(); $table->enum('type', ['deploy', 'backup', 'update', 'security', 'system', 'login'])->default('system'); $table->enum('level', ['info', 'success', 'warning', 'error'])->default('info'); $table->string('message'); diff --git a/app/database/migrations/2026_05_31_200009_create_crons_table.php b/app/database/migrations/2026_05_31_200009_create_crons_table.php index 32647be..1e85f7d 100644 --- a/app/database/migrations/2026_05_31_200009_create_crons_table.php +++ b/app/database/migrations/2026_05_31_200009_create_crons_table.php @@ -8,8 +8,8 @@ return new class extends Migration { public function up(): void { Schema::create('crons', function (Blueprint $table) { - $table->id(); - $table->foreignId('site_id')->constrained()->cascadeOnDelete(); + $table->uuid('id')->primary(); + $table->foreignUuid('site_id')->constrained()->cascadeOnDelete(); $table->string('name'); $table->string('expression', 64)->default('0 * * * *'); // cron expr $table->string('command');