mirror of
https://github.com/archtechx/tenancy.git
synced 2026-02-05 09:54:05 +00:00
WIP event system
This commit is contained in:
parent
9671e1e29d
commit
84a6c4770c
1 changed files with 16 additions and 7 deletions
|
|
@ -64,6 +64,8 @@ class TenantManager
|
||||||
*/
|
*/
|
||||||
public function createTenant(Tenant $tenant): self
|
public function createTenant(Tenant $tenant): self
|
||||||
{
|
{
|
||||||
|
$this->event('creating', $tenant);
|
||||||
|
|
||||||
$this->ensureTenantCanBeCreated($tenant);
|
$this->ensureTenantCanBeCreated($tenant);
|
||||||
|
|
||||||
$this->storage->createTenant($tenant);
|
$this->storage->createTenant($tenant);
|
||||||
|
|
@ -95,6 +97,8 @@ class TenantManager
|
||||||
|
|
||||||
$this->database->createDatabase($tenant, $afterCreating);
|
$this->database->createDatabase($tenant, $afterCreating);
|
||||||
|
|
||||||
|
$this->event('created', $tenant);
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -106,12 +110,16 @@ class TenantManager
|
||||||
*/
|
*/
|
||||||
public function deleteTenant(Tenant $tenant): self
|
public function deleteTenant(Tenant $tenant): self
|
||||||
{
|
{
|
||||||
|
$this->event('deleting', $tenant);
|
||||||
|
|
||||||
$this->storage->deleteTenant($tenant);
|
$this->storage->deleteTenant($tenant);
|
||||||
|
|
||||||
if ($this->shouldDeleteDatabase()) {
|
if ($this->shouldDeleteDatabase()) {
|
||||||
$this->database->deleteDatabase($tenant);
|
$this->database->deleteDatabase($tenant);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->event('deleted', $tenant);
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -272,20 +280,20 @@ class TenantManager
|
||||||
*/
|
*/
|
||||||
public function bootstrapTenancy(Tenant $tenant): self
|
public function bootstrapTenancy(Tenant $tenant): self
|
||||||
{
|
{
|
||||||
$prevented = $this->event('bootstrapping');
|
$prevented = $this->event('bootstrapping', $tenant);
|
||||||
|
|
||||||
foreach ($this->tenancyBootstrappers($prevented) as $bootstrapper) {
|
foreach ($this->tenancyBootstrappers($prevented) as $bootstrapper) {
|
||||||
$this->app[$bootstrapper]->start($tenant);
|
$this->app[$bootstrapper]->start($tenant);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->event('bootstrapped');
|
$this->event('bootstrapped', $tenant);
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function endTenancy(): self
|
public function endTenancy(): self
|
||||||
{
|
{
|
||||||
$prevented = $this->event('ending');
|
$prevented = $this->event('ending', $this->getTenant());
|
||||||
|
|
||||||
foreach ($this->tenancyBootstrappers($prevented) as $bootstrapper) {
|
foreach ($this->tenancyBootstrappers($prevented) as $bootstrapper) {
|
||||||
$this->app[$bootstrapper]->end();
|
$this->app[$bootstrapper]->end();
|
||||||
|
|
@ -419,14 +427,15 @@ class TenantManager
|
||||||
* Execute event listeners.
|
* Execute event listeners.
|
||||||
*
|
*
|
||||||
* @param string $name
|
* @param string $name
|
||||||
|
* @param mixed ...$args
|
||||||
* @return string[]
|
* @return string[]
|
||||||
*/
|
*/
|
||||||
protected function event(string $name): array
|
protected function event(string $name, ...$args): array
|
||||||
{
|
{
|
||||||
return array_reduce($this->eventListeners[$name] ?? [], function ($prevented, $listener) {
|
return array_reduce($this->eventListeners[$name] ?? [], function ($results, $listener) use ($args) {
|
||||||
$prevented = array_merge($prevented, $listener($this) ?? []);
|
$results = array_merge($results, $listener($this, ...$args) ?? []);
|
||||||
|
|
||||||
return $prevented;
|
return $results;
|
||||||
}, []);
|
}, []);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue