1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2026-02-05 07:54:03 +00:00

findBy DB storage driver

This commit is contained in:
Samuel Štancl 2019-10-24 19:22:00 +02:00
parent a80275c1ac
commit 8d73381eae
2 changed files with 44 additions and 2 deletions

View file

@ -8,8 +8,8 @@ use Exception;
class TenantDoesNotExistException extends Exception
{
public function __construct(string $id)
public function __construct(string $id, string $key = 'id')
{
$this->message = "Tenant with this id does not exist: $id";
$this->message = "Tenant with this $key does not exist: $id";
}
}

View file

@ -70,6 +70,28 @@ class DatabaseStorageDriver implements StorageDriver
->withDomains($this->getTenantDomains($id));
}
/**
* Find a tenant using an arbitrary key.
*
* @param string $key
* @param mixed $value
* @return Tenant
* @throws TenantCouldNotBeIdentifiedException
* @throws NotImplementedException
*/
public function findBy(string $key, $value): Tenant
{
// [WIP] [TODO] Temporary implementation, key has to be a custom column.
$tenant = Tenant::where($key, $value)->first();
if (! $tenant) {
throw new TenantDoesNotExistException($value, $key);
}
return Tenant::fromStorage($tenant->decoded())
->withDomains($this->getTenantDomains($tenant->id));
}
protected function getTenantDomains($id)
{
return Domains::where('tenant_id', $id)->get()->map(function ($model) {
@ -194,3 +216,23 @@ class DatabaseStorageDriver implements StorageDriver
Tenants::find($tenant->id)->putMany($kvPairs);
}
}
class TenantModelTODO
{
public static function makeTenant($data, $domains)
{
// TODO
}
public static function findBy(string $key, $value)
{
// TODO
}
// TODO Use this w/ DB builder calls instead of an Eloquent model
}
class DomainModelTODO
{
// TODO Use this w/ DB builder calls instead of an Eloquent model
}