From ced7d594e83c52c45b0c78cd92a3e8bd0b72c2d3 Mon Sep 17 00:00:00 2001 From: ncoronel Date: Tue, 18 Aug 2026 16:16:39 -0300 Subject: [PATCH] refactor(integrations): move configuration ownership to clients --- app/Domains/Client/Models/Client.php | 7 ++ ...e_integrations_from_tenants_to_clients.php | 96 +++++++++---------- 2 files changed, 51 insertions(+), 52 deletions(-) diff --git a/app/Domains/Client/Models/Client.php b/app/Domains/Client/Models/Client.php index 4bf501b..e0bf9e1 100644 --- a/app/Domains/Client/Models/Client.php +++ b/app/Domains/Client/Models/Client.php @@ -2,6 +2,7 @@ namespace App\Domains\Client\Models; +use App\Domains\Integration\Models\ClientIntegration; use App\Domains\Tenant\Models\Tenant; use Illuminate\Database\Eloquent\Attributes\Fillable; use Illuminate\Database\Eloquent\Model; @@ -20,4 +21,10 @@ class Client extends Model { return $this->hasMany(Tenant::class); } + + /** @return HasMany */ + public function integrations(): HasMany + { + return $this->hasMany(ClientIntegration::class); + } } diff --git a/database/migrations/2026_08_18_041000_move_integrations_from_tenants_to_clients.php b/database/migrations/2026_08_18_041000_move_integrations_from_tenants_to_clients.php index ab83648..2f54c62 100644 --- a/database/migrations/2026_08_18_041000_move_integrations_from_tenants_to_clients.php +++ b/database/migrations/2026_08_18_041000_move_integrations_from_tenants_to_clients.php @@ -9,63 +9,55 @@ return new class extends Migration { public function up(): void { - if (! Schema::hasTable('client_integrations')) { - Schema::create('client_integrations', function (Blueprint $table): void { - $table->id(); - $table->foreignId('client_id')->constrained('clients')->cascadeOnDelete(); - $table->string('integration_code'); - $table->longText('integration_data')->nullable(); - $table->timestamps(); + Schema::create('client_integrations', function (Blueprint $table): void { + $table->id(); + $table->foreignId('client_id')->constrained('clients')->cascadeOnDelete(); + $table->string('integration_code'); + $table->longText('integration_data')->nullable(); + $table->timestamps(); - $table->foreign('integration_code') - ->references('integration_code') - ->on('integrations') - ->cascadeOnDelete(); - $table->unique(['client_id', 'integration_code']); + $table->foreign('integration_code') + ->references('integration_code') + ->on('integrations') + ->cascadeOnDelete(); + $table->unique(['client_id', 'integration_code']); + }); + + DB::table('tenant_integration') + ->join('tenants', 'tenants.codigo', '=', 'tenant_integration.tenant_code') + ->select([ + 'tenants.client_id', + 'tenant_integration.integration_code', + 'tenant_integration.integration_data', + 'tenant_integration.created_at', + 'tenant_integration.updated_at', + ]) + ->orderBy('tenant_integration.id') + ->each(function (object $configuration): void { + DB::table('client_integrations')->updateOrInsert( + [ + 'client_id' => $configuration->client_id, + 'integration_code' => $configuration->integration_code, + ], + [ + 'integration_data' => $configuration->integration_data, + 'created_at' => $configuration->created_at, + 'updated_at' => $configuration->updated_at, + ], + ); }); - } - if (Schema::hasTable('tenant_integration')) { - DB::table('tenant_integration') - ->join('tenants', 'tenants.codigo', '=', 'tenant_integration.tenant_code') - ->select([ - 'tenants.client_id', - 'tenant_integration.integration_code', - 'tenant_integration.integration_data', - 'tenant_integration.created_at', - 'tenant_integration.updated_at', - ]) - ->orderBy('tenant_integration.id') - ->each(function (object $configuration): void { - DB::table('client_integrations')->updateOrInsert( - [ - 'client_id' => $configuration->client_id, - 'integration_code' => $configuration->integration_code, - ], - [ - 'integration_data' => $configuration->integration_data, - 'created_at' => $configuration->created_at, - 'updated_at' => $configuration->updated_at, - ], - ); - }); - } + Schema::table('integrations', function (Blueprint $table): void { + $table->boolean('requires_client_configuration')->default(true); + }); - if (! Schema::hasColumn('integrations', 'requires_client_configuration')) { - Schema::table('integrations', function (Blueprint $table): void { - $table->boolean('requires_client_configuration')->default(true); - }); - } + DB::table('integrations')->update([ + 'requires_client_configuration' => DB::raw('requires_tenant_configuration'), + ]); - if (Schema::hasColumn('integrations', 'requires_tenant_configuration')) { - DB::table('integrations')->update([ - 'requires_client_configuration' => DB::raw('requires_tenant_configuration'), - ]); - - Schema::table('integrations', function (Blueprint $table): void { - $table->dropColumn('requires_tenant_configuration'); - }); - } + Schema::table('integrations', function (Blueprint $table): void { + $table->dropColumn('requires_tenant_configuration'); + }); Schema::dropIfExists('tenant_integration'); }