mirror of
https://github.com/archtechx/tenancy.git
synced 2025-12-12 14:34:04 +00:00
wip
This commit is contained in:
parent
d3712dfacc
commit
0ac7fb74d6
4 changed files with 20 additions and 22 deletions
|
|
@ -55,7 +55,7 @@ return [
|
||||||
'mysql' => 'Stancl\Tenancy\TenantDatabaseManagers\MySQLDatabaseManager',
|
'mysql' => 'Stancl\Tenancy\TenantDatabaseManagers\MySQLDatabaseManager',
|
||||||
'pgsql' => 'Stancl\Tenancy\TenantDatabaseManagers\PostgreSQLDatabaseManager',
|
'pgsql' => 'Stancl\Tenancy\TenantDatabaseManagers\PostgreSQLDatabaseManager',
|
||||||
],
|
],
|
||||||
'tenancy_bootstrappers' => [
|
'bootstrappers' => [
|
||||||
'database' => 'Stancl\Tenancy\TenancyBootstrappers\DatabaseTenancyBootstrapper',
|
'database' => 'Stancl\Tenancy\TenancyBootstrappers\DatabaseTenancyBootstrapper',
|
||||||
'cache' => 'Stancl\Tenancy\TenancyBootstrappers\CacheTenancyBootstrapper',
|
'cache' => 'Stancl\Tenancy\TenancyBootstrappers\CacheTenancyBootstrapper',
|
||||||
'filesystem' => 'Stancl\Tenancy\TenancyBootstrappers\FilesystemTenancyBootstrapper',
|
'filesystem' => 'Stancl\Tenancy\TenancyBootstrappers\FilesystemTenancyBootstrapper',
|
||||||
|
|
|
||||||
|
|
@ -125,15 +125,17 @@ class TenancyServiceProvider extends ServiceProvider
|
||||||
$this->mergeConfigFrom(__DIR__ . '/../assets/config.php', 'tenancy');
|
$this->mergeConfigFrom(__DIR__ . '/../assets/config.php', 'tenancy');
|
||||||
|
|
||||||
$this->app->bind(StorageDriver::class, $this->app['config']['tenancy.storage_driver']);
|
$this->app->bind(StorageDriver::class, $this->app['config']['tenancy.storage_driver']);
|
||||||
$this->app->bind(ServerConfigManager::class, $this->app['config']['tenancy.server.manager']);
|
|
||||||
$this->app->singleton(DatabaseManager::class);
|
$this->app->singleton(DatabaseManager::class);
|
||||||
$this->app->singleton(TenantManager::class, function ($app) {
|
$this->app->singleton(TenantManager::class, function ($app) {
|
||||||
return new TenantManager(
|
return new TenantManager(
|
||||||
$app, $app[StorageDriver::class], $app[DatabaseManager::class], $app[$app['config']['tenancy.unique_id_generator']]
|
$app, $app[StorageDriver::class], $app[DatabaseManager::class], $app[$app['config']['tenancy.unique_id_generator']] // todo
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
// todo foreach bootstrappers, singleton
|
// todo foreach bootstrappers, singleton
|
||||||
|
foreach ($this->app['config']['tenancy.bootstrappers'] as $bootstrapper) {
|
||||||
|
$this->app->singleton($bootstrapper); // todo key?
|
||||||
|
}
|
||||||
|
|
||||||
$this->app->singleton(Migrate::class, function ($app) {
|
$this->app->singleton(Migrate::class, function ($app) {
|
||||||
return new Migrate($app['migrator'], $app[DatabaseManager::class]);
|
return new Migrate($app['migrator'], $app[DatabaseManager::class]);
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ class Tenant implements ArrayAccess, CurrentTenant
|
||||||
public static function new(): self
|
public static function new(): self
|
||||||
{
|
{
|
||||||
return app(static::class)->withData([
|
return app(static::class)->withData([
|
||||||
'id' => static::generateId(),
|
'id' => static::generateId(), // todo
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ namespace Stancl\Tenancy;
|
||||||
use Illuminate\Foundation\Application;
|
use Illuminate\Foundation\Application;
|
||||||
|
|
||||||
// todo rethink integration events
|
// todo rethink integration events
|
||||||
// todo events
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal Class is subject to breaking changes in minor and patch versions.
|
* @internal Class is subject to breaking changes in minor and patch versions.
|
||||||
|
|
@ -27,6 +26,10 @@ class TenantManagerv2
|
||||||
/** @var Contracts\StorageDriver */
|
/** @var Contracts\StorageDriver */
|
||||||
private $storage;
|
private $storage;
|
||||||
|
|
||||||
|
// todo event "listeners" instead of "callbacks"
|
||||||
|
/** @var callable[][] */
|
||||||
|
public $callbacks = [];
|
||||||
|
|
||||||
public function __construct(Application $app, Contracts\StorageDriver $storage)
|
public function __construct(Application $app, Contracts\StorageDriver $storage)
|
||||||
{
|
{
|
||||||
$this->app = $app;
|
$this->app = $app;
|
||||||
|
|
@ -63,6 +66,8 @@ class TenantManagerv2
|
||||||
$this->app[$bootstrapper]->start($tenant);
|
$this->app[$bootstrapper]->start($tenant);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->event('bootstrapped');
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -74,6 +79,8 @@ class TenantManagerv2
|
||||||
$this->app[$bootstrapper]->end();
|
$this->app[$bootstrapper]->end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->event('ended');
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -92,28 +99,17 @@ class TenantManagerv2
|
||||||
*/
|
*/
|
||||||
public function tenancyBootstrappers($except = []): array
|
public function tenancyBootstrappers($except = []): array
|
||||||
{
|
{
|
||||||
return array_key_diff(config('tenancy.tenancy_bootstrappers'), $except);
|
return array_key_diff(config('tenancy.bootstrappers'), $except);
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo event "listeners" instead of "callbacks"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO
|
* Add event callback.
|
||||||
*
|
*
|
||||||
* @param string $name
|
* @param string $name
|
||||||
* @param callable $callback
|
* @param callable $callback
|
||||||
* @return self|string[]
|
* @return self
|
||||||
*/
|
*/
|
||||||
public function event(string $name, callable $callback = null)
|
public function eventCallback(string $name, callable $callback): self
|
||||||
{
|
|
||||||
if ($callback) {
|
|
||||||
return $this->addEventCallback($name, $callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->executeEventCallbacks($name);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function addEventCallback(string $name, callable $callback): self
|
|
||||||
{
|
{
|
||||||
isset($this->eventCallbacks[$name]) || $this->eventCallbacks[$name] = [];
|
isset($this->eventCallbacks[$name]) || $this->eventCallbacks[$name] = [];
|
||||||
$this->eventCallbacks[$name][] = $callback;
|
$this->eventCallbacks[$name][] = $callback;
|
||||||
|
|
@ -122,12 +118,12 @@ class TenantManagerv2
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO
|
* Execute event callbacks.
|
||||||
*
|
*
|
||||||
* @param string $name
|
* @param string $name
|
||||||
* @return string[]
|
* @return string[]
|
||||||
*/
|
*/
|
||||||
public function executeEventCallbacks(string $name): array
|
protected function event(string $name): array
|
||||||
{
|
{
|
||||||
return array_reduce($this->eventCalbacks[$name] ?? [], function ($prevented, $callback) {
|
return array_reduce($this->eventCalbacks[$name] ?? [], function ($prevented, $callback) {
|
||||||
$prevented = array_merge($prevented, $callback($this) ?? []);
|
$prevented = array_merge($prevented, $callback($this) ?? []);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue