refactor(integrations): move configuration ownership to clients

This commit is contained in:
2026-08-18 16:16:39 -03:00
parent 38e87fff6c
commit ced7d594e8
2 changed files with 51 additions and 52 deletions

View File

@@ -2,6 +2,7 @@
namespace App\Domains\Client\Models; namespace App\Domains\Client\Models;
use App\Domains\Integration\Models\ClientIntegration;
use App\Domains\Tenant\Models\Tenant; use App\Domains\Tenant\Models\Tenant;
use Illuminate\Database\Eloquent\Attributes\Fillable; use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
@@ -20,4 +21,10 @@ class Client extends Model
{ {
return $this->hasMany(Tenant::class); return $this->hasMany(Tenant::class);
} }
/** @return HasMany<ClientIntegration, $this> */
public function integrations(): HasMany
{
return $this->hasMany(ClientIntegration::class);
}
} }

View File

@@ -9,63 +9,55 @@ return new class extends Migration
{ {
public function up(): void public function up(): void
{ {
if (! Schema::hasTable('client_integrations')) { Schema::create('client_integrations', function (Blueprint $table): void {
Schema::create('client_integrations', function (Blueprint $table): void { $table->id();
$table->id(); $table->foreignId('client_id')->constrained('clients')->cascadeOnDelete();
$table->foreignId('client_id')->constrained('clients')->cascadeOnDelete(); $table->string('integration_code');
$table->string('integration_code'); $table->longText('integration_data')->nullable();
$table->longText('integration_data')->nullable(); $table->timestamps();
$table->timestamps();
$table->foreign('integration_code') $table->foreign('integration_code')
->references('integration_code') ->references('integration_code')
->on('integrations') ->on('integrations')
->cascadeOnDelete(); ->cascadeOnDelete();
$table->unique(['client_id', 'integration_code']); $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')) { Schema::table('integrations', function (Blueprint $table): void {
DB::table('tenant_integration') $table->boolean('requires_client_configuration')->default(true);
->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::hasColumn('integrations', 'requires_client_configuration')) { DB::table('integrations')->update([
Schema::table('integrations', function (Blueprint $table): void { 'requires_client_configuration' => DB::raw('requires_tenant_configuration'),
$table->boolean('requires_client_configuration')->default(true); ]);
});
}
if (Schema::hasColumn('integrations', 'requires_tenant_configuration')) { Schema::table('integrations', function (Blueprint $table): void {
DB::table('integrations')->update([ $table->dropColumn('requires_tenant_configuration');
'requires_client_configuration' => DB::raw('requires_tenant_configuration'), });
]);
Schema::table('integrations', function (Blueprint $table): void {
$table->dropColumn('requires_tenant_configuration');
});
}
Schema::dropIfExists('tenant_integration'); Schema::dropIfExists('tenant_integration');
} }