mirror of
https://github.com/archtechx/tenancy.git
synced 2026-02-05 16:34:04 +00:00
Add readied events
This commit is contained in:
parent
f487f92f0d
commit
30f0a2b134
7 changed files with 80 additions and 1 deletions
|
|
@ -49,6 +49,12 @@ class TenancyServiceProvider extends ServiceProvider
|
||||||
})->shouldBeQueued(false), // `false` by default, but you probably want to make this `true` for production.
|
})->shouldBeQueued(false), // `false` by default, but you probably want to make this `true` for production.
|
||||||
],
|
],
|
||||||
|
|
||||||
|
// Readied events
|
||||||
|
Events\ReadyingTenant::class => [],
|
||||||
|
Events\TenantReadied::class => [],
|
||||||
|
Events\PullingReadiedTenant::class => [],
|
||||||
|
Events\ReadiedTenantPulled::class => [],
|
||||||
|
|
||||||
// Domain events
|
// Domain events
|
||||||
Events\CreatingDomain::class => [],
|
Events\CreatingDomain::class => [],
|
||||||
Events\DomainCreated::class => [],
|
Events\DomainCreated::class => [],
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,11 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace Stancl\Tenancy\Database\Concerns;
|
namespace Stancl\Tenancy\Database\Concerns;
|
||||||
|
|
||||||
use Carbon\Carbon;
|
|
||||||
use Stancl\Tenancy\Contracts\Tenant;
|
use Stancl\Tenancy\Contracts\Tenant;
|
||||||
|
use Stancl\Tenancy\Events\PullingReadiedTenant;
|
||||||
|
use Stancl\Tenancy\Events\ReadiedTenantPulled;
|
||||||
|
use Stancl\Tenancy\Events\ReadyingTenant;
|
||||||
|
use Stancl\Tenancy\Events\TenantReadied;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @property null|Carbon $readied
|
* @property null|Carbon $readied
|
||||||
|
|
@ -51,11 +54,15 @@ trait WithReadied
|
||||||
{
|
{
|
||||||
$tenant = static::create($attributes);
|
$tenant = static::create($attributes);
|
||||||
|
|
||||||
|
event(new ReadyingTenant($tenant));
|
||||||
|
|
||||||
// We add the readied value only after the model has then been created.
|
// We add the readied value only after the model has then been created.
|
||||||
// this ensures the model is not marked as readied until the migrations, seeders, etc. are done
|
// this ensures the model is not marked as readied until the migrations, seeders, etc. are done
|
||||||
$tenant->update([
|
$tenant->update([
|
||||||
'readied' => now()->timestamp
|
'readied' => now()->timestamp
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
event(new TenantReadied($tenant));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function pullReadiedTenant(bool $firstOrCreate = false): ?Tenant
|
public static function pullReadiedTenant(bool $firstOrCreate = false): ?Tenant
|
||||||
|
|
@ -70,10 +77,14 @@ trait WithReadied
|
||||||
// At this point we can guarantee a readied tenant is free and can be called
|
// At this point we can guarantee a readied tenant is free and can be called
|
||||||
$tenant = static::onlyReadied()->first();
|
$tenant = static::onlyReadied()->first();
|
||||||
|
|
||||||
|
event(new PullingReadiedTenant($tenant));
|
||||||
|
|
||||||
$tenant->update([
|
$tenant->update([
|
||||||
'readied' => null
|
'readied' => null
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
event(new ReadiedTenantPulled($tenant));
|
||||||
|
|
||||||
return $tenant;
|
return $tenant;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
9
src/Events/PullingReadiedTenant.php
Normal file
9
src/Events/PullingReadiedTenant.php
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Stancl\Tenancy\Events;
|
||||||
|
|
||||||
|
class PullingReadiedTenant extends Contracts\TenantEvent
|
||||||
|
{
|
||||||
|
}
|
||||||
9
src/Events/ReadiedTenantPulled.php
Normal file
9
src/Events/ReadiedTenantPulled.php
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Stancl\Tenancy\Events;
|
||||||
|
|
||||||
|
class ReadiedTenantPulled extends Contracts\TenantEvent
|
||||||
|
{
|
||||||
|
}
|
||||||
9
src/Events/ReadyingTenant.php
Normal file
9
src/Events/ReadyingTenant.php
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Stancl\Tenancy\Events;
|
||||||
|
|
||||||
|
class ReadyingTenant extends Contracts\TenantEvent
|
||||||
|
{
|
||||||
|
}
|
||||||
9
src/Events/TenantReadied.php
Normal file
9
src/Events/TenantReadied.php
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Stancl\Tenancy\Events;
|
||||||
|
|
||||||
|
class TenantReadied extends Contracts\TenantEvent
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
@ -5,8 +5,13 @@ declare(strict_types=1);
|
||||||
namespace Stancl\Tenancy\Tests;
|
namespace Stancl\Tenancy\Tests;
|
||||||
|
|
||||||
use Illuminate\Support\Facades\Artisan;
|
use Illuminate\Support\Facades\Artisan;
|
||||||
|
use Illuminate\Support\Facades\Event;
|
||||||
use Stancl\Tenancy\Commands\ClearReadiedTenants;
|
use Stancl\Tenancy\Commands\ClearReadiedTenants;
|
||||||
use Stancl\Tenancy\Commands\CreateReadiedTenants;
|
use Stancl\Tenancy\Commands\CreateReadiedTenants;
|
||||||
|
use Stancl\Tenancy\Events\PullingReadiedTenant;
|
||||||
|
use Stancl\Tenancy\Events\ReadiedTenantPulled;
|
||||||
|
use Stancl\Tenancy\Events\ReadyingTenant;
|
||||||
|
use Stancl\Tenancy\Events\TenantReadied;
|
||||||
use Stancl\Tenancy\Tests\Etc\Tenant;
|
use Stancl\Tenancy\Tests\Etc\Tenant;
|
||||||
|
|
||||||
class ReadiedTenantsTest extends TestCase
|
class ReadiedTenantsTest extends TestCase
|
||||||
|
|
@ -127,4 +132,25 @@ class ReadiedTenantsTest extends TestCase
|
||||||
$this->assertCount(1, Tenant::all());
|
$this->assertCount(1, Tenant::all());
|
||||||
Tenant::all();
|
Tenant::all();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @test */
|
||||||
|
public function readied_events_are_triggerred()
|
||||||
|
{
|
||||||
|
Event::fake([
|
||||||
|
ReadyingTenant::class,
|
||||||
|
TenantReadied::class,
|
||||||
|
PullingReadiedTenant::class,
|
||||||
|
ReadiedTenantPulled::class,
|
||||||
|
]);
|
||||||
|
|
||||||
|
Tenant::createReadied();
|
||||||
|
|
||||||
|
Event::assertDispatched(ReadyingTenant::class);
|
||||||
|
Event::assertDispatched(TenantReadied::class);
|
||||||
|
|
||||||
|
Tenant::pullReadiedTenant();
|
||||||
|
|
||||||
|
Event::assertDispatched(PullingReadiedTenant::class);
|
||||||
|
Event::assertDispatched(ReadiedTenantPulled::class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue