mirror of
https://github.com/archtechx/tenancy.git
synced 2026-02-04 19:24:02 +00:00
also invalidate the resolver cache when a tenant or related model is deleted
This commit is contained in:
parent
19bc316cf6
commit
1bcc215966
3 changed files with 70 additions and 14 deletions
|
|
@ -18,13 +18,17 @@ trait InvalidatesResolverCache
|
||||||
|
|
||||||
public static function bootInvalidatesResolverCache()
|
public static function bootInvalidatesResolverCache()
|
||||||
{
|
{
|
||||||
static::saved(function (Tenant $tenant) {
|
static::saved(fn(Tenant $tenant) => static::invalidateTenantCache($tenant));
|
||||||
foreach (static::$resolvers as $resolver) {
|
static::deleted(fn(Tenant $tenant) => static::invalidateTenantCache($tenant));
|
||||||
/** @var CachedTenantResolver $resolver */
|
}
|
||||||
$resolver = app($resolver);
|
|
||||||
|
|
||||||
$resolver->invalidateCache($tenant);
|
private static function invalidateTenantCache(Tenant $tenant): void
|
||||||
}
|
{
|
||||||
});
|
foreach (static::$resolvers as $resolver) {
|
||||||
|
/** @var CachedTenantResolver $resolver */
|
||||||
|
$resolver = app($resolver);
|
||||||
|
|
||||||
|
$resolver->invalidateCache($tenant);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,13 +21,17 @@ trait InvalidatesTenantsResolverCache
|
||||||
|
|
||||||
public static function bootInvalidatesTenantsResolverCache()
|
public static function bootInvalidatesTenantsResolverCache()
|
||||||
{
|
{
|
||||||
static::saved(function (Model $model) {
|
static::saved(fn(Model $model) => static::invalidateTenantCache($model));
|
||||||
foreach (static::$resolvers as $resolver) {
|
static::deleted(fn(Model $model) => static::invalidateTenantCache($model));
|
||||||
/** @var CachedTenantResolver $resolver */
|
}
|
||||||
$resolver = app($resolver);
|
|
||||||
|
|
||||||
$resolver->invalidateCache($model->tenant);
|
private static function invalidateTenantCache(Model $model): void
|
||||||
}
|
{
|
||||||
});
|
foreach (static::$resolvers as $resolver) {
|
||||||
|
/** @var CachedTenantResolver $resolver */
|
||||||
|
$resolver = app($resolver);
|
||||||
|
|
||||||
|
$resolver->invalidateCache($model->tenant);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -109,4 +109,52 @@ class CachedTenantResolverTest extends TestCase
|
||||||
$this->assertTrue($tenant->is(app(DomainTenantResolver::class)->resolve('bar')));
|
$this->assertTrue($tenant->is(app(DomainTenantResolver::class)->resolve('bar')));
|
||||||
$this->assertNotEmpty(DB::getQueryLog()); // not empty
|
$this->assertNotEmpty(DB::getQueryLog()); // not empty
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @test */
|
||||||
|
public function cache_is_invalidated_when_a_tenants_domain_is_deleted()
|
||||||
|
{
|
||||||
|
$tenant = Tenant::create();
|
||||||
|
$tenant->createDomain([
|
||||||
|
'domain' => 'acme',
|
||||||
|
]);
|
||||||
|
|
||||||
|
DB::enableQueryLog();
|
||||||
|
|
||||||
|
DomainTenantResolver::$shouldCache = true;
|
||||||
|
|
||||||
|
$this->assertTrue($tenant->is(app(DomainTenantResolver::class)->resolve('acme')));
|
||||||
|
DB::flushQueryLog();
|
||||||
|
$this->assertTrue($tenant->is(app(DomainTenantResolver::class)->resolve('acme')));
|
||||||
|
$this->assertEmpty(DB::getQueryLog()); // empty
|
||||||
|
|
||||||
|
$tenant->domains()->first()->delete();
|
||||||
|
|
||||||
|
DB::flushQueryLog();
|
||||||
|
$this->assertTrue($tenant->is(app(DomainTenantResolver::class)->resolve('acme')));
|
||||||
|
$this->assertEmpty(DB::getQueryLog()); // not empty
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @test */
|
||||||
|
public function cache_is_invalidated_when_a_tenant_is_deleted()
|
||||||
|
{
|
||||||
|
$tenant = Tenant::create();
|
||||||
|
$tenant->createDomain([
|
||||||
|
'domain' => 'acme',
|
||||||
|
]);
|
||||||
|
|
||||||
|
DB::enableQueryLog();
|
||||||
|
|
||||||
|
DomainTenantResolver::$shouldCache = true;
|
||||||
|
|
||||||
|
$this->assertTrue($tenant->is(app(DomainTenantResolver::class)->resolve('acme')));
|
||||||
|
DB::flushQueryLog();
|
||||||
|
$this->assertTrue($tenant->is(app(DomainTenantResolver::class)->resolve('acme')));
|
||||||
|
$this->assertEmpty(DB::getQueryLog()); // empty
|
||||||
|
|
||||||
|
$tenant->delete();
|
||||||
|
|
||||||
|
DB::flushQueryLog();
|
||||||
|
$this->assertTrue($tenant->is(app(DomainTenantResolver::class)->resolve('acme')));
|
||||||
|
$this->assertEmpty(DB::getQueryLog()); // not empty
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue