mirror of
https://github.com/archtechx/tenancy.git
synced 2026-02-04 19:04:03 +00:00
wip
This commit is contained in:
commit
fd0712e037
2 changed files with 16 additions and 27 deletions
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
namespace Stancl\Tenancy\StorageDrivers;
|
namespace Stancl\Tenancy\StorageDrivers;
|
||||||
|
|
||||||
use Stancl\Tenancy\Interfaces\StorageDriver;
|
|
||||||
use Stancl\Tenancy\Tenant;
|
use Stancl\Tenancy\Tenant;
|
||||||
|
use Stancl\Tenancy\Interfaces\StorageDriver;
|
||||||
|
|
||||||
class DatabaseStorageDriver implements StorageDriver
|
class DatabaseStorageDriver implements StorageDriver
|
||||||
{
|
{
|
||||||
|
|
@ -26,13 +26,7 @@ class DatabaseStorageDriver implements StorageDriver
|
||||||
*/
|
*/
|
||||||
public function getTenantById(string $uuid, array $fields = []): array
|
public function getTenantById(string $uuid, array $fields = []): array
|
||||||
{
|
{
|
||||||
$fields = (array) $fields;
|
return Tenant::find($uuid)->only($fields)->toArray();
|
||||||
|
|
||||||
if (! $fields) {
|
|
||||||
return $this->redis->hgetall("tenants:$uuid");
|
|
||||||
}
|
|
||||||
|
|
||||||
return array_combine($fields, $this->redis->hmget("tenants:$uuid", $fields));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTenantIdByDomain(string $domain): ?string
|
public function getTenantIdByDomain(string $domain): ?string
|
||||||
|
|
@ -47,21 +41,11 @@ class DatabaseStorageDriver implements StorageDriver
|
||||||
|
|
||||||
public function deleteTenant(string $id): bool
|
public function deleteTenant(string $id): bool
|
||||||
{
|
{
|
||||||
try {
|
|
||||||
$domain = json_decode($this->getTenantById($id)['domain']);
|
|
||||||
} catch (\Throwable $th) {
|
|
||||||
throw new \Exception("No tenant with UUID $id exists.");
|
|
||||||
}
|
|
||||||
|
|
||||||
return Tenant::find($id)->delete();
|
return Tenant::find($id)->delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllTenants(array $uuids = []): array
|
public function getAllTenants(array $uuids = []): array
|
||||||
{
|
{
|
||||||
$hashes = array_map(function ($hash) {
|
|
||||||
return "tenants:{$hash}";
|
|
||||||
}, $uuids);
|
|
||||||
|
|
||||||
return Tenant::all()->map(function ($model) {
|
return Tenant::all()->map(function ($model) {
|
||||||
return $model->toArray();
|
return $model->toArray();
|
||||||
})->toArray();
|
})->toArray();
|
||||||
|
|
@ -70,6 +54,7 @@ class DatabaseStorageDriver implements StorageDriver
|
||||||
public function get(string $uuid, string $key)
|
public function get(string $uuid, string $key)
|
||||||
{
|
{
|
||||||
$tenant = Tenant::find($uuid);
|
$tenant = Tenant::find($uuid);
|
||||||
|
|
||||||
return $tenant->$key ?? json_decode($tenant->data)[$key] ?? null;
|
return $tenant->$key ?? json_decode($tenant->data)[$key] ?? null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -80,24 +65,27 @@ class DatabaseStorageDriver implements StorageDriver
|
||||||
$tenant_data = null; // cache - json_decode() can be expensive
|
$tenant_data = null; // cache - json_decode() can be expensive
|
||||||
$get_from_tenant_data = function ($key) use ($tenant, &$tenant_data) {
|
$get_from_tenant_data = function ($key) use ($tenant, &$tenant_data) {
|
||||||
$tenant_data = $tenant_data ?? json_decode($tenant->data);
|
$tenant_data = $tenant_data ?? json_decode($tenant->data);
|
||||||
|
|
||||||
return $tenant_data[$key] ?? null;
|
return $tenant_data[$key] ?? null;
|
||||||
};
|
};
|
||||||
|
|
||||||
return array_reduce($keys, function ($keys, $key) use ($tenant, $get_from_tenant_data) {
|
return array_reduce($keys, function ($keys, $key) use ($tenant, $get_from_tenant_data) {
|
||||||
$keys[$key] = $tenant->$key ?? $get_from_tenant_data($key) ?? null;
|
$keys[$key] = $tenant->$key ?? $get_from_tenant_data($key) ?? null;
|
||||||
|
|
||||||
return $keys;
|
return $keys;
|
||||||
}, []);
|
}, []);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function put(string $uuid, string $key, $value)
|
public function put(string $uuid, string $key, $value)
|
||||||
{
|
{
|
||||||
// return Tenant::find($uuid) TODO
|
return Tenant::find($uuid)->put($key, $value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function putMany(string $uuid, array $values): array
|
public function putMany(string $uuid, array $values): array
|
||||||
{
|
{
|
||||||
// todo
|
foreach ($values as $key => $value) {
|
||||||
// $this->redis->hmset("tenants:$uuid", $values);
|
Tenant::find($uuid)->put($key, $value);
|
||||||
|
}
|
||||||
|
|
||||||
return $values;
|
return $values;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,20 +6,21 @@ use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Tenant extends Model
|
class Tenant extends Model
|
||||||
{
|
{
|
||||||
public function getDataColumn()
|
protected $dataColumn = 'data';
|
||||||
{
|
protected $specialColumns = [];
|
||||||
return 'data';
|
protected $guarded = [];
|
||||||
}
|
|
||||||
|
|
||||||
public function put(string $key, $value)
|
public function put(string $key, $value)
|
||||||
{
|
{
|
||||||
if ($this->getConnection()->getSchemaBuilder()->hasColumn($this->getTable(), $key)) {
|
if (array_key_exists($key, $this->specialColumns)) {
|
||||||
$this->update([$key => $value]);
|
$this->update([$key => $value]);
|
||||||
} else {
|
} else {
|
||||||
$obj = json_decode($this->{$this->getDataColumn()});
|
$obj = json_decode($this->{$this->dataColumn});
|
||||||
$obj->$key = $value;
|
$obj->$key = $value;
|
||||||
|
|
||||||
$this->update([$this->getDataColumn() => json_encode($obj)]);
|
$this->update([$this->getDataColumn() => json_encode($obj)]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue