From b02126e8d78edc0ab5ce4b28aff36094aad35e27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20=C5=A0tancl?= Date: Wed, 11 Sep 2019 17:34:11 +0200 Subject: [PATCH] Redis storage json encoding --- src/StorageDrivers/RedisStorageDriver.php | 40 +++++++++++++++-------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/src/StorageDrivers/RedisStorageDriver.php b/src/StorageDrivers/RedisStorageDriver.php index 0d7834a8..d88b49ae 100644 --- a/src/StorageDrivers/RedisStorageDriver.php +++ b/src/StorageDrivers/RedisStorageDriver.php @@ -44,20 +44,13 @@ class RedisStorageDriver implements StorageDriver return $this->find($id); } - /** - * Get information about the tenant based on his id. - * - * @param string $id - * @param string[] $fields - * @return array - */ - public function find(string $id, array $fields = []): array + public function find(string $id): Tenant { if (! $fields) { return $this->redis->hgetall("tenants:$id"); } - return array_combine($fields, $this->redis->hmget("tenants:$id", $fields)); + return array_combine($fields, $this->redis->hmget("tenants:$id", $fields)); // todo factory } public function getTenantIdByDomain(string $domain): ?string @@ -78,8 +71,15 @@ class RedisStorageDriver implements StorageDriver public function updateTenant(Tenant $tenant): void { - $this->redis->hmset("tenants:{$tenant->id}", $tenant->data); - // todo update domains + $this->redis->pipeline(function ($pipe) use ($tenant) { + $this->redis->hmset("tenants:{$tenant->id}", $tenant->data); + + foreach ($tenant->domains as $domain) { + $this->redis->hmset("domains:$domain", 'tenant_id', $tenant->id); + } + + // todo deleted domains + }); } public function deleteTenant(Tenant $tenant): void @@ -95,7 +95,7 @@ class RedisStorageDriver implements StorageDriver public function all(array $ids = []): array { - // todo $this->redis->pipeline() + // todo $this->redis->pipeline() - return? $hashes = array_map(function ($hash) { return "tenants:{$hash}"; }, $ids); @@ -127,13 +127,20 @@ class RedisStorageDriver implements StorageDriver public function getMany(array $keys, Tenant $tenant = null): array { $tenant = $tenant ?? $this->tenant(); - return $this->redis->hmget("tenants:{$tenant->id}", $keys); + + $result = []; + $values = $this->redis->hmget("tenants:{$tenant->id}", $keys); + foreach ($keys as $i => $key) { + $result[$key] = $values[$i]; + } + + return $result; } public function put(string $key, $value, Tenant $tenant = null) { $tenant = $tenant ?? $this->tenant(); - $this->redis->hset("tenants:{$tenant->id}", $key, $value); + $this->redis->hset("tenants:{$tenant->id}", $key, json_encode($value)); return $value; } @@ -141,6 +148,11 @@ class RedisStorageDriver implements StorageDriver public function putMany(array $kvPairs, Tenant $tenant = null): array { $tenant = $tenant ?? $this->tenant(); + + foreach ($kvPairs as $key => $value) { + $kvPairs[$key] = json_encode($value); + } + $this->redis->hmset("tenants:{$tenant->id}", $kvPairs); return $kvPairs;