mirror of
https://github.com/archtechx/tenancy.git
synced 2026-02-05 13:54:04 +00:00
Merge branch 'sync' of https://github.com/leandrogehlen/tenancy into 3.x
This commit is contained in:
commit
d34a6dcd7d
4 changed files with 80 additions and 7 deletions
|
|
@ -15,4 +15,6 @@ interface Syncable
|
||||||
public function getSyncedAttributeNames(): array;
|
public function getSyncedAttributeNames(): array;
|
||||||
|
|
||||||
public function triggerSyncEvent();
|
public function triggerSyncEvent();
|
||||||
|
|
||||||
|
public function isSyncEnabled();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue