From 14f415914f8b746ad8f556312ba890b9900daca4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20=C5=A0tancl?= Date: Mon, 21 Jan 2019 18:19:01 +0100 Subject: [PATCH] Add more storage features --- src/Interfaces/StorageDriver.php | 2 + src/StorageDrivers/RedisStorageDriver.php | 11 ++++++ src/TenantManager.php | 48 +++++++++++++++++++---- 3 files changed, 53 insertions(+), 8 deletions(-) diff --git a/src/Interfaces/StorageDriver.php b/src/Interfaces/StorageDriver.php index e4640ba1..f261c01d 100644 --- a/src/Interfaces/StorageDriver.php +++ b/src/Interfaces/StorageDriver.php @@ -11,5 +11,7 @@ interface StorageDriver public function createTenant(string $domain, string $uuid): array; public function deleteTenant(string $uuid): bool; public function get(string $uuid, string $key); + public function getMany(string $uuid, array $keys); public function put(string $uuid, string $key, $value); + public function putMany(string $uuid, array $values); } diff --git a/src/StorageDrivers/RedisStorageDriver.php b/src/StorageDrivers/RedisStorageDriver.php index 58eb1499..5cb3c8b6 100644 --- a/src/StorageDrivers/RedisStorageDriver.php +++ b/src/StorageDrivers/RedisStorageDriver.php @@ -83,9 +83,20 @@ class RedisStorageDriver implements StorageDriver return $this->redis->hget("tenants:$uuid", $key); } + public function getMany(string $uuid, array $keys) + { + return $this->redis->hmget("tenants:$uuid", $keys); + } + public function put(string $uuid, string $key, $value) { $this->redis->hset("tenants:$uuid", $key, $value); return $value; } + + public function putMany(string $uuid, string $values) + { + $this->redis->hmset("tenants:$uuid", $values); + return $values; + } } diff --git a/src/TenantManager.php b/src/TenantManager.php index 2d654088..0cf50df1 100644 --- a/src/TenantManager.php +++ b/src/TenantManager.php @@ -162,6 +162,12 @@ class TenantManager return config('tenancy.database.prefix') . $tenant['uuid'] . config('tenancy.database.suffix'); } + public function getStoragePath($tenant = []): ?string + { + $tenant = $tenant ?: $this->tenant; + return config('tenancy.filesystem.suffix_base') . $tenant['uuid']; + } + public function setTenant(array $tenant): array { $this->tenant = $tenant; @@ -191,33 +197,59 @@ class TenantManager return $this->init($domain); } - public function get(string $key) + /** + * Get a value from the storage for a tenant. + * + * @param string|array $key + * @param string $uuid + * @return mixed + */ + public function get($key, string $uuid = null) { + $uuid = $uuid ?: $this->tenant['uuid']; + + if (is_array($key)) { + return $this->storage->getMany($uuid, $key); + } + return $this->storage->get($this->tenant['uuid'], $key); } /** - * Puts a value into the storage for the current tenant. + * Puts a value into the storage for a tenant. * - * @param string $key + * @param string|array $key * @param mixed $value + * @param string uuid * @return mixed */ - public function put(string $key, $value) + public function put($key, $value = null, string $uuid = null) { - // Todo allow $value to be null and $key to be an array. - return $this->tenant[$key] = $this->storage->put($this->tenant['uuid'], $key, $value); + $uuid = $uuid ?: $this->tenant['uuid']; + + if (! is_null($value)) { + return $this->tenant[$key] = $this->storage->put($uuid, $key, $value); + } + + if (! is_array($key)) { + throw new \Exception("No value supplied for key $key."); + } + + return $this->tenant[$key] = $this->storage->putMany($uuid, $key); } /** * Alias for put(). * - * @param string $key + * @param string|array $key * @param mixed $value + * @param string $uuid * @return mixed */ - public function set(string $key, $value) + public function set($key, $value = null, string $uuid = null) { + $uuid = $uuid ?: $this->tenant['uuid']; + return $this->put($this->put($key, $value)); } }