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

WIP event system

This commit is contained in:
Samuel Štancl 2019-10-25 19:01:51 +02:00
parent 9671e1e29d
commit 84a6c4770c

View file

@ -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;
}, []); }, []);
} }