From 7a0154bf8e65caef19bf323b7c7194cd55822ec7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20=C5=A0tancl?= Date: Wed, 11 Sep 2019 21:11:40 +0200 Subject: [PATCH] Get tests to run --- .../Database/DatabaseStorageDriver.php | 46 +++++++++++-------- src/StorageDrivers/RedisStorageDriver.php | 15 +++--- .../CacheTenancyBoostrapper.php | 3 +- .../DatabaseTenancyBootstrapper.php | 1 + .../FilesystemTenancyBootstrapper.php | 3 +- .../QueueTenancyBootstrapper.php | 3 +- .../RedisTenancyBootstrapper.php | 3 +- src/Tenant.php | 1 + 8 files changed, 46 insertions(+), 29 deletions(-) diff --git a/src/StorageDrivers/Database/DatabaseStorageDriver.php b/src/StorageDrivers/Database/DatabaseStorageDriver.php index 28f2327e..61fba0f7 100644 --- a/src/StorageDrivers/Database/DatabaseStorageDriver.php +++ b/src/StorageDrivers/Database/DatabaseStorageDriver.php @@ -24,22 +24,32 @@ class DatabaseStorageDriver implements StorageDriver return $this->find($id); } - public function find(string $id): Tenant + public function findById(string $id): Tenant { return Tenant::fromStorage(Tenants::find($id)->decoded()) ->withDomains(Domains::where('tenant_id', $id)->all()->only('domain')->toArray()); } + public function canCreateTenant(Tenant $tenant) + { + // todo + } + public function getTenantIdByDomain(string $domain): ?string { return Domains::where('domain', $domain)->first()->tenant_id ?? null; } - public function createTenant(string $domain, string $id): void + public function createTenant(Tenant $tenant): void { - DB::transaction(function () use ($domain, $id) { - Tenants::create(['id' => $id, 'data' => '{}'])->toArray(); - Domains::create(['domain' => $domain, 'tenant_id' => $id]); + DB::transaction(function () use ($tenant) { + Tenants::create(['id' => $tenant->id, 'data' => '{}'])->toArray(); + + $domainData = []; + foreach($tenant->domains as $domain) { + $domainData[] = ['domain' => $domain, 'tenant_id' => $tenant->id]; + } + Domains::create($domainData); }); } @@ -48,9 +58,10 @@ class DatabaseStorageDriver implements StorageDriver // todo } - public function deleteTenant(string $id): bool + public function deleteTenant(Tenant $tenant): void { - return Tenants::find($id)->delete(); + Tenants::find($tenant->id)->delete(); + // todo domains } public function all(array $ids = []): array @@ -58,27 +69,26 @@ class DatabaseStorageDriver implements StorageDriver return Tenants::getAllTenants($ids)->toArray(); } - public function get(string $id, string $key) + public function get(string $key, Tenant $tenant = null) { - return Tenants::find($id)->get($key); + return Tenants::find($tenant->id)->get($key); } - public function getMany(string $id, array $keys): array + // todo storage methods default to current tenant + public function getMany(array $keys, Tenant $tenant = null): array { - return Tenants::find($id)->getMany($keys); + return Tenants::find($tenant->id)->getMany($keys); } - public function put(string $id, string $key, $value) + public function put(string $key, $value, Tenant $tenant = null): void { - return Tenants::find($id)->put($key, $value); + Tenants::find($tenant->id)->put($key, $value); } - public function putMany(string $id, array $values): array + public function putMany(array $kvPairs, Tenant $tenant = null): void { - foreach ($values as $key => $value) { // todo performance - Tenants::find($id)->put($key, $value); + foreach ($kvPairs as $key => $value) { // todo performance + Tenants::find($tenant->id)->put($key, $value); } - - return $values; } } diff --git a/src/StorageDrivers/RedisStorageDriver.php b/src/StorageDrivers/RedisStorageDriver.php index 95f9bb71..3c81c1de 100644 --- a/src/StorageDrivers/RedisStorageDriver.php +++ b/src/StorageDrivers/RedisStorageDriver.php @@ -36,6 +36,11 @@ class RedisStorageDriver implements StorageDriver return $this->app[Tenant::class]; } + public function canCreateTenant(Tenant $tenant) + { + // todo + } + public function findByDomain(string $domain): Tenant { $id = $this->getTenantIdByDomain($domain); @@ -46,7 +51,7 @@ class RedisStorageDriver implements StorageDriver return $this->find($id); } - public function find(string $id): Tenant + public function findById(string $id): Tenant { $data = $this->redis->hgetall("tenants:$id"); $keys = []; @@ -151,15 +156,13 @@ class RedisStorageDriver implements StorageDriver return $result; } - public function put(string $key, $value, Tenant $tenant = null) + public function put(string $key, $value, Tenant $tenant = null): void { $tenant = $tenant ?? $this->tenant(); $this->redis->hset("tenants:{$tenant->id}", $key, json_encode($value)); - - return $value; } - public function putMany(array $kvPairs, Tenant $tenant = null): array + public function putMany(array $kvPairs, Tenant $tenant = null): void { $tenant = $tenant ?? $this->tenant(); @@ -168,7 +171,5 @@ class RedisStorageDriver implements StorageDriver } $this->redis->hmset("tenants:{$tenant->id}", $kvPairs); - - return $kvPairs; } } diff --git a/src/TenancyBootstrappers/CacheTenancyBoostrapper.php b/src/TenancyBootstrappers/CacheTenancyBoostrapper.php index 429c7352..bfd4b2c3 100644 --- a/src/TenancyBootstrappers/CacheTenancyBoostrapper.php +++ b/src/TenancyBootstrappers/CacheTenancyBoostrapper.php @@ -5,13 +5,14 @@ declare(strict_types=1); namespace Stancl\Tenancy\TenancyBoostrappers; use Stancl\Tenancy\Contracts\TenancyBootstrapper; +use Stancl\Tenancy\Tenant; class CacheTenancyBoostrapper implements TenancyBootstrapper { /** @var \Illuminate\Cache\CacheManager */ protected $originalCache; - public function start() + public function start(Tenant $tenant) { $this->originalCache = $this->originalCache ?? $this->app['cache']; $this->app->extend('cache', function () { diff --git a/src/TenancyBootstrappers/DatabaseTenancyBootstrapper.php b/src/TenancyBootstrappers/DatabaseTenancyBootstrapper.php index 09ae3529..1cfc6a45 100644 --- a/src/TenancyBootstrappers/DatabaseTenancyBootstrapper.php +++ b/src/TenancyBootstrappers/DatabaseTenancyBootstrapper.php @@ -7,6 +7,7 @@ namespace Stancl\Tenancy\TenancyBoostrappers; use Illuminate\Foundation\Application; use Stancl\Tenancy\Contracts\TenancyBootstrapper; use Stancl\Tenancy\DatabaseManager; +use Stancl\Tenancy\Tenant; class DatabaseTenancyBootstrapper implements TenancyBootstrapper { diff --git a/src/TenancyBootstrappers/FilesystemTenancyBootstrapper.php b/src/TenancyBootstrappers/FilesystemTenancyBootstrapper.php index bd09b33b..ca0a2671 100644 --- a/src/TenancyBootstrappers/FilesystemTenancyBootstrapper.php +++ b/src/TenancyBootstrappers/FilesystemTenancyBootstrapper.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace Stancl\Tenancy\TenancyBoostrappers; use Stancl\Tenancy\Contracts\TenancyBootstrapper; +use Stancl\Tenancy\Tenant; // todo better solution than tenant_asset? @@ -24,7 +25,7 @@ class FilesystemTenancyBootstrapper implements TenancyBootstrapper ]; } - public function start() + public function start(Tenant $tenant) { // todo revisit this $suffix = $this->app['config']['tenancy.filesystem.suffix_base'] . tenant('uuid'); diff --git a/src/TenancyBootstrappers/QueueTenancyBootstrapper.php b/src/TenancyBootstrappers/QueueTenancyBootstrapper.php index 2465d364..38cab5bc 100644 --- a/src/TenancyBootstrappers/QueueTenancyBootstrapper.php +++ b/src/TenancyBootstrappers/QueueTenancyBootstrapper.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace Stancl\Tenancy\TenancyBoostrappers; use Stancl\Tenancy\Contracts\TenancyBootstrapper; +use Stancl\Tenancy\Tenant; class QueueTenancyBootstrapper implements TenancyBootstrapper { @@ -26,7 +27,7 @@ class QueueTenancyBootstrapper implements TenancyBootstrapper }); } - public function start() + public function start(Tenant $tenant) { $this->started = true; } diff --git a/src/TenancyBootstrappers/RedisTenancyBootstrapper.php b/src/TenancyBootstrappers/RedisTenancyBootstrapper.php index a8e22374..7f3d4c9e 100644 --- a/src/TenancyBootstrappers/RedisTenancyBootstrapper.php +++ b/src/TenancyBootstrappers/RedisTenancyBootstrapper.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace Stancl\Tenancy\TenantDatabaseManagers; use Stancl\Tenancy\Contracts\TenancyBootstrapper; +use Stancl\Tenancy\Tenant; class RedisTenancyBootstrapper implements TenancyBootstrapper { @@ -19,7 +20,7 @@ class RedisTenancyBootstrapper implements TenancyBootstrapper $this->app = $app; } - public function start() + public function start(Tenant $tenant) { foreach ($this->prefixedConnections() as $connection) { $prefix = $this->app['config']['tenancy.redis.prefix_base'] . $this->tenant['uuid']; diff --git a/src/Tenant.php b/src/Tenant.php index 26b7f007..df2e750b 100644 --- a/src/Tenant.php +++ b/src/Tenant.php @@ -69,6 +69,7 @@ class Tenant implements ArrayAccess return $this; } + // todo addDomain, removeDomain public function withDomains($domains): self { $domains = (array) $domains;