Skip to content

Commit

Permalink
[4.x] Don't use onDeleteCascade in the migrations (archtechx#883)
Browse files Browse the repository at this point in the history
* removed `cascade` on delete for domains

* removed only `onDelete` cascade

* keep impersonation migrations unchanged

* domains set null on delete

* Update 2019_09_15_000020_create_domains_table.php

* Added DeleteDomain Job while deleting tenant.

* Update assets/TenancyServiceProvider.stub.php

Co-authored-by: Samuel Štancl <[email protected]>

* renamed class

* Update DeleteDomains.php

* onDelete restrict

* revert nullable

* removed `shouldQueue` interface

* Update TenancyServiceProvider.stub.php

* fetch and delete domains individually

* Update DeleteDomains.php

* tests for `DeleteDomains` job

Co-authored-by: Samuel Štancl <[email protected]>
  • Loading branch information
abrardev99 and stancl authored Jul 20, 2022
1 parent 4aec6bf commit 627233d
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 2 deletions.
8 changes: 7 additions & 1 deletion assets/TenancyServiceProvider.stub.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,13 @@ public function events()
Events\TenantSaved::class => [],
Events\UpdatingTenant::class => [],
Events\TenantUpdated::class => [],
Events\DeletingTenant::class => [],
Events\DeletingTenant::class => [
JobPipeline::make([
Jobs\DeleteDomains::class,
])->send(function (Events\DeletingTenant $event) {
return $event->tenant;
})->shouldBeQueued(false),
],
Events\TenantDeleted::class => [
JobPipeline::make([
Jobs\DeleteDatabase::class,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public function up(): void
$table->string('tenant_id');

$table->timestamps();
$table->foreign('tenant_id')->references('id')->on('tenants')->onUpdate('cascade')->onDelete('cascade');
$table->foreign('tenant_id')->references('id')->on('tenants')->onUpdate('cascade');
});
}

Expand Down
35 changes: 35 additions & 0 deletions src/Jobs/DeleteDomains.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?php

declare(strict_types=1);

namespace Stancl\Tenancy\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\Models\Domain;
use Stancl\Tenancy\Events\DatabaseDeleted;
use Stancl\Tenancy\Events\DeletingDatabase;
use Stancl\Tenancy\Events\DeletingDomain;
use Stancl\Tenancy\Events\DomainDeleted;

class DeleteDomains
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

/** @var TenantWithDatabase */
protected $tenant;

public function __construct(TenantWithDatabase $tenant)
{
$this->tenant = $tenant;
}

public function handle()
{
$this->tenant->domains->each->delete();
}
}
42 changes: 42 additions & 0 deletions tests/DeleteDomainsJobTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php

declare(strict_types=1);

namespace Stancl\Tenancy\Tests;

use Stancl\Tenancy\Database\Concerns\HasDomains;
use Stancl\Tenancy\Jobs\DeleteDomains;

class DeleteDomainsJobTest extends TestCase
{
public function setUp(): void
{
parent::setUp();

config(['tenancy.tenant_model' => DatabaseAndDomainTenant::class]);
}

/** @test */
public function job_delete_domains_successfully()
{
$tenant = DatabaseAndDomainTenant::create();

$tenant->domains()->create([
'domain' => 'foo.localhost',
]);
$tenant->domains()->create([
'domain' => 'bar.localhost',
]);

$this->assertSame($tenant->domains()->count(), 2);

(new DeleteDomains($tenant))->handle();

$this->assertSame($tenant->refresh()->domains()->count(), 0);
}
}

class DatabaseAndDomainTenant extends Etc\Tenant
{
use HasDomains;
}

0 comments on commit 627233d

Please sign in to comment.