1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2026-02-05 11:44:04 +00:00
This commit is contained in:
Leandro Guindani Gehlen 2022-12-21 09:51:01 -03:00
commit d34a6dcd7d
4 changed files with 80 additions and 7 deletions

View file

@ -15,4 +15,6 @@ interface Syncable
public function getSyncedAttributeNames(): array; public function getSyncedAttributeNames(): array;
public function triggerSyncEvent(); public function triggerSyncEvent();
public function isSyncEnabled();
} }

View file

@ -14,15 +14,16 @@ trait ResourceSyncing
{ {
static::saved(function (Syncable $model) { static::saved(function (Syncable $model) {
/** @var ResourceSyncing $model */ /** @var ResourceSyncing $model */
$model->triggerSyncEvent(); if ($model->isSyncEnabled()) {
$model->triggerSyncEvent();
}
}); });
static::creating(function (self $model) { static::creating(function (self $model) {
if (! $model->getAttribute($model->getGlobalIdentifierKeyName()) && app()->bound(UniqueIdentifierGenerator::class)) { $keyName = $model->getGlobalIdentifierKeyName();
$model->setAttribute(
$model->getGlobalIdentifierKeyName(), if (! $model->getAttribute($keyName) && app()->bound(UniqueIdentifierGenerator::class)) {
app(UniqueIdentifierGenerator::class)->generate($model) $model->setAttribute($keyName, app(UniqueIdentifierGenerator::class)->generate($model));
);
} }
}); });
} }
@ -32,4 +33,9 @@ trait ResourceSyncing
/** @var Syncable $this */ /** @var Syncable $this */
event(new SyncedResourceSaved($this, tenant())); event(new SyncedResourceSaved($this, tenant()));
} }
public function isSyncEnabled()
{
return true;
}
} }

View file

@ -16,7 +16,7 @@ class TenantPivot extends Pivot
static::saved(function (self $pivot) { static::saved(function (self $pivot) {
$parent = $pivot->pivotParent; $parent = $pivot->pivotParent;
if ($parent instanceof Syncable) { if ($parent instanceof Syncable && $parent->isSyncEnabled()) {
$parent->triggerSyncEvent(); $parent->triggerSyncEvent();
} }
}); });

View file

@ -89,6 +89,61 @@ class ResourceSyncingTest extends TestCase
}); });
} }
/** @test */
public function resources_are_synced_only_sync_is_enabled()
{
CentralUser::create([
'global_id' => 'acme',
'name' => 'John Doe',
'email' => 'john@localhost',
'password' => 'secret',
'role' => 'commenter', // synced
]);
$tenant = ResourceTenant::create();
$this->migrateTenants();
$tenant->run(function() {
ResourceUser::create([
'name' => 'Foo',
'email' => 'foo@email.com',
'password' => 'secret',
'global_id' => 'acme',
'role' => 'not_sync',
]);
});
$centralUser = CentralUser::first();
$this->assertSame('John Doe', $centralUser->name); // not sync
$this->assertSame('john@localhost', $centralUser->email); // not sync
$this->assertSame('secret', $centralUser->password); // not sync
}
/** @test */
public function central_users_are_synced_only_sync_is_enabled()
{
$centralUser = CentralUser::create([
'global_id' => 'acme',
'name' => 'John Doe',
'email' => 'john@localhost',
'password' => 'secret',
'role' => 'not_sync', // unsynced
]);
$t1 = ResourceTenant::create([
'id' => 't1',
]);
$this->migrateTenants();
$centralUser->tenants()->attach('t1');
$t1->run(function () {
// assert user not exsits
$this->assertCount(0, ResourceUser::all());
});
}
/** @test */ /** @test */
public function only_the_synced_columns_are_updated_in_the_central_db() public function only_the_synced_columns_are_updated_in_the_central_db()
{ {
@ -626,6 +681,11 @@ class CentralUser extends Model implements SyncMaster
'email', 'email',
]; ];
} }
public function isSyncEnabled()
{
return $this->role !== 'not_sync';
}
} }
class ResourceUser extends Model implements Syncable class ResourceUser extends Model implements Syncable
@ -659,4 +719,9 @@ class ResourceUser extends Model implements Syncable
'email', 'email',
]; ];
} }
public function isSyncEnabled()
{
return $this->role !== 'not_sync';
}
} }