From 627233d07aa173893cc2afd6484d44f8455c7362 Mon Sep 17 00:00:00 2001 From: Abrar Ahmad Date: Wed, 20 Jul 2022 16:02:33 +0500 Subject: [PATCH] [4.x] Don't use onDeleteCascade in the migrations (#883) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 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 * 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 --- assets/TenancyServiceProvider.stub.php | 8 +++- ...2019_09_15_000020_create_domains_table.php | 2 +- src/Jobs/DeleteDomains.php | 35 ++++++++++++++++ tests/DeleteDomainsJobTest.php | 42 +++++++++++++++++++ 4 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 src/Jobs/DeleteDomains.php create mode 100644 tests/DeleteDomainsJobTest.php diff --git a/assets/TenancyServiceProvider.stub.php b/assets/TenancyServiceProvider.stub.php index 1d15f418..865bb93d 100644 --- a/assets/TenancyServiceProvider.stub.php +++ b/assets/TenancyServiceProvider.stub.php @@ -40,7 +40,13 @@ class TenancyServiceProvider extends ServiceProvider 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, diff --git a/assets/migrations/2019_09_15_000020_create_domains_table.php b/assets/migrations/2019_09_15_000020_create_domains_table.php index 77c1b88a..17f706c2 100644 --- a/assets/migrations/2019_09_15_000020_create_domains_table.php +++ b/assets/migrations/2019_09_15_000020_create_domains_table.php @@ -21,7 +21,7 @@ class CreateDomainsTable extends Migration $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'); }); } diff --git a/src/Jobs/DeleteDomains.php b/src/Jobs/DeleteDomains.php new file mode 100644 index 00000000..fac60e43 --- /dev/null +++ b/src/Jobs/DeleteDomains.php @@ -0,0 +1,35 @@ +tenant = $tenant; + } + + public function handle() + { + $this->tenant->domains->each->delete(); + } +} diff --git a/tests/DeleteDomainsJobTest.php b/tests/DeleteDomainsJobTest.php new file mode 100644 index 00000000..7fce9cf3 --- /dev/null +++ b/tests/DeleteDomainsJobTest.php @@ -0,0 +1,42 @@ + 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; +}