1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2025-12-12 18:04:03 +00:00

Update tenant tests

This commit is contained in:
Samuel Štancl 2019-09-20 19:24:02 +02:00
parent b268dd5d50
commit 61cc0d9364
6 changed files with 55 additions and 19 deletions

View file

@ -92,12 +92,20 @@ class DatabaseStorageDriver implements StorageDriver
public function updateTenant(Tenant $tenant): void
{
Tenants::find($tenant->id)->putMany($tenant->data);
Domains::firstOrCreate(array_map(function ($domain) use ($tenant) {
return [
$original_domains = Domains::where('tenant_id', $tenant->id)->get()->map(function ($model) {
return $model->domain;
})->toArray();
$deleted_domains = array_diff($original_domains, $tenant->domains);
Domains::whereIn('domain', $deleted_domains)->delete();
foreach ($tenant->domains as $domain) {
Domains::firstOrCreate([
'tenant_id' => $tenant->id,
'domain' => $domain,
];
}, $tenant->domains));
]);
}
}
public function deleteTenant(Tenant $tenant): void

View file

@ -99,28 +99,27 @@ class RedisStorageDriver implements StorageDriver
public function updateTenant(Tenant $tenant): void
{
$id = $tenant->id;
$old_domains = json_decode($this->redis->hget("tenants:$id", '_tenancy_domains'), true);
$deleted_domains = array_diff($old_domains, $tenant->domains);
$domains = $tenant->domains;
$data = [];
foreach ($tenant->data as $key => $value) {
$data[$key] = json_decode($value, true);
$data[$key] = json_encode($value);
}
$domains = $data['_tenancy_domains'];
unset($data['_tenancy_domains']);
$this->redis->transaction(function ($pipe) use ($data, $domains) {
$id = $data['id'];
$old_domains = json_decode($pipe->hget("tenants:$id", 'domains'), true);
$deleted_domains = array_diff($old_domains, $domains);
$this->redis->transaction(function ($pipe) use ($id, $data, $deleted_domains, $domains) {
foreach ($deleted_domains as $deleted_domain) {
$pipe->del("domains:$deleted_domain");
}
$pipe->hmset("tenants:$id", array_merge($data, ['_tenancy_domains' => json_encode($domains)]));
foreach ($domains as $domain) {
$pipe->hmset("domains:$domain", 'tenant_id', $id);
$pipe->hset("domains:$domain", 'tenant_id', $id);
}
$pipe->hmset("tenants:$id", array_merge($data, ['_tenancy_domains' => json_encode($domains)]));
});
}

View file

@ -279,4 +279,9 @@ class Tenant implements ArrayAccess
}
$this->data[$key] = $value;
}
public function __call($name, $arguments)
{
// todo withId()
}
}