1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2025-12-12 22:14:03 +00:00

Add Tenant object

This commit is contained in:
Samuel Štancl 2019-09-04 19:39:24 +02:00
parent 72baa45126
commit 96e8dec5eb

91
src/Tenant.php Normal file
View file

@ -0,0 +1,91 @@
<?php
declare(strict_types=1);
namespace Stancl\Tenancy;
/**
* @final Class is subject to breaking changes in minor and patch versions.
*/
final class Tenant
{
// todo specify id in data
/**
* Tenant data.
*
* @var array
*/
public $data = [];
/**
* List of domains that belong to the tenant.
*
* @var string[]
*/
public $domains;
/**
* @var TenantManager
*/
private $manager;
/**
* Does this tenant exist in the storage.
*
* @var boolean
*/
private $persisted = false;
public function __construct(TenantManager $tenantManager)
{
$this->manager = $tenantManager;
}
public static function new(): self
{
return app(static::class);
}
public static function fromStorage(array $data): self
{
return app(static::class)->withData($data)->persisted();
}
public function persisted()
{
$this->persisted = true;
return $this;
}
public function withDomains($domains): self
{
$domains = (array) $domains;
$this->domains = $domains;
return $this;
}
public function withData($data): self
{
$this->data = $data;
return $this;
}
public function save()
{
if ($this->persisted) {
$this->manager->addTenant($this);
} else {
$this->manager->updateTenant($this);
}
}
public function __get($name)
{
return $this->data[$name];
}
}