diff --git a/src/Concerns/Debuggable.php b/src/Concerns/Debuggable.php index 98697f1d..ff781f89 100644 --- a/src/Concerns/Debuggable.php +++ b/src/Concerns/Debuggable.php @@ -9,6 +9,8 @@ use Stancl\Tenancy\Enums\LogMode; use Stancl\Tenancy\Events\Contracts\TenancyEvent; use Stancl\Tenancy\Tenancy; +// todo finish this feature + /** * @mixin Tenancy */ diff --git a/src/Database/DatabaseConfig.php b/src/Database/DatabaseConfig.php index 4c33348d..a4c79582 100644 --- a/src/Database/DatabaseConfig.php +++ b/src/Database/DatabaseConfig.php @@ -12,14 +12,17 @@ use Stancl\Tenancy\Database\Contracts\TenantWithDatabase as Tenant; class DatabaseConfig { - // todo docblocks + /** The tenant whose database we're dealing with. */ public Tenant&Model $tenant; - public static Closure $usernameGenerator; + /** Database username generator (can be set by the developer.) */ + public static Closure|null $usernameGenerator = null; - public static Closure $passwordGenerator; + /** Database password generator (can be set by the developer.) */ + public static Closure|null $passwordGenerator = null; - public static Closure $databaseNameGenerator; + /** Database name generator (can be set by the developer.) */ + public static Closure|null $databaseNameGenerator = null; public static function __constructStatic(): void { diff --git a/src/Database/TenantDatabaseManagers/MicrosoftSQLDatabaseManager.php b/src/Database/TenantDatabaseManagers/MicrosoftSQLDatabaseManager.php index 241a879a..65950baa 100644 --- a/src/Database/TenantDatabaseManagers/MicrosoftSQLDatabaseManager.php +++ b/src/Database/TenantDatabaseManagers/MicrosoftSQLDatabaseManager.php @@ -2,34 +2,12 @@ declare(strict_types=1); -// todo likely move all of these classes to Database\ - namespace Stancl\Tenancy\Database\TenantDatabaseManagers; -use Illuminate\Database\Connection; -use Illuminate\Support\Facades\DB; -use Stancl\Tenancy\Database\Contracts\TenantDatabaseManager; use Stancl\Tenancy\Database\Contracts\TenantWithDatabase; -use Stancl\Tenancy\Database\Exceptions\NoConnectionSetException; -class MicrosoftSQLDatabaseManager implements TenantDatabaseManager +class MicrosoftSQLDatabaseManager extends TenantDatabaseManager { - protected string $connection; // todo docblock, in all of these classes - - protected function database(): Connection // todo consider abstracting this method & setConnection() into a base class - { - if ($this->connection === null) { - throw new NoConnectionSetException(static::class); - } - - return DB::connection($this->connection); - } - - public function setConnection(string $connection): void - { - $this->connection = $connection; - } - public function createDatabase(TenantWithDatabase $tenant): bool { $database = $tenant->database()->getName(); @@ -48,11 +26,4 @@ class MicrosoftSQLDatabaseManager implements TenantDatabaseManager { return (bool) $this->database()->select("SELECT name FROM master.sys.databases WHERE name = '$name'"); } - - public function makeConnectionConfig(array $baseConfig, string $databaseName): array - { - $baseConfig['database'] = $databaseName; - - return $baseConfig; - } } diff --git a/src/Database/TenantDatabaseManagers/MySQLDatabaseManager.php b/src/Database/TenantDatabaseManagers/MySQLDatabaseManager.php index 92a434c2..c96c162b 100644 --- a/src/Database/TenantDatabaseManagers/MySQLDatabaseManager.php +++ b/src/Database/TenantDatabaseManagers/MySQLDatabaseManager.php @@ -4,31 +4,10 @@ declare(strict_types=1); namespace Stancl\Tenancy\Database\TenantDatabaseManagers; -use Illuminate\Database\Connection; -use Illuminate\Support\Facades\DB; -use Stancl\Tenancy\Database\Contracts\TenantDatabaseManager; use Stancl\Tenancy\Database\Contracts\TenantWithDatabase; -use Stancl\Tenancy\Database\Exceptions\NoConnectionSetException; -class MySQLDatabaseManager implements TenantDatabaseManager +class MySQLDatabaseManager extends TenantDatabaseManager { - /** @var string */ - protected $connection; - - protected function database(): Connection - { - if ($this->connection === null) { - throw new NoConnectionSetException(static::class); - } - - return DB::connection($this->connection); - } - - public function setConnection(string $connection): void - { - $this->connection = $connection; - } - public function createDatabase(TenantWithDatabase $tenant): bool { $database = $tenant->database()->getName(); @@ -47,11 +26,4 @@ class MySQLDatabaseManager implements TenantDatabaseManager { return (bool) $this->database()->select("SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '$name'"); } - - public function makeConnectionConfig(array $baseConfig, string $databaseName): array - { - $baseConfig['database'] = $databaseName; - - return $baseConfig; - } } diff --git a/src/Database/TenantDatabaseManagers/PermissionControlledMySQLDatabaseManager.php b/src/Database/TenantDatabaseManagers/PermissionControlledMySQLDatabaseManager.php index 30913f59..337864dc 100644 --- a/src/Database/TenantDatabaseManagers/PermissionControlledMySQLDatabaseManager.php +++ b/src/Database/TenantDatabaseManagers/PermissionControlledMySQLDatabaseManager.php @@ -54,11 +54,4 @@ class PermissionControlledMySQLDatabaseManager extends MySQLDatabaseManager impl { return (bool) $this->database()->select("SELECT count(*) FROM mysql.user WHERE user = '$username'")[0]->{'count(*)'}; } - - public function makeConnectionConfig(array $baseConfig, string $databaseName): array - { - $baseConfig['database'] = $databaseName; - - return $baseConfig; - } } diff --git a/src/Database/TenantDatabaseManagers/PostgreSQLDatabaseManager.php b/src/Database/TenantDatabaseManagers/PostgreSQLDatabaseManager.php index d342b7b0..6a3aee2e 100644 --- a/src/Database/TenantDatabaseManagers/PostgreSQLDatabaseManager.php +++ b/src/Database/TenantDatabaseManagers/PostgreSQLDatabaseManager.php @@ -4,31 +4,10 @@ declare(strict_types=1); namespace Stancl\Tenancy\Database\TenantDatabaseManagers; -use Illuminate\Database\Connection; -use Illuminate\Support\Facades\DB; -use Stancl\Tenancy\Database\Contracts\TenantDatabaseManager; use Stancl\Tenancy\Database\Contracts\TenantWithDatabase; -use Stancl\Tenancy\Database\Exceptions\NoConnectionSetException; -class PostgreSQLDatabaseManager implements TenantDatabaseManager +class PostgreSQLDatabaseManager extends TenantDatabaseManager { - /** @var string */ - protected $connection; - - protected function database(): Connection - { - if ($this->connection === null) { - throw new NoConnectionSetException(static::class); - } - - return DB::connection($this->connection); - } - - public function setConnection(string $connection): void - { - $this->connection = $connection; - } - public function createDatabase(TenantWithDatabase $tenant): bool { return $this->database()->statement("CREATE DATABASE \"{$tenant->database()->getName()}\" WITH TEMPLATE=template0"); @@ -43,11 +22,4 @@ class PostgreSQLDatabaseManager implements TenantDatabaseManager { return (bool) $this->database()->select("SELECT datname FROM pg_database WHERE datname = '$name'"); } - - public function makeConnectionConfig(array $baseConfig, string $databaseName): array - { - $baseConfig['database'] = $databaseName; - - return $baseConfig; - } } diff --git a/src/Database/TenantDatabaseManagers/PostgreSQLSchemaManager.php b/src/Database/TenantDatabaseManagers/PostgreSQLSchemaManager.php index 1a3dcc77..fa5aa593 100644 --- a/src/Database/TenantDatabaseManagers/PostgreSQLSchemaManager.php +++ b/src/Database/TenantDatabaseManagers/PostgreSQLSchemaManager.php @@ -4,31 +4,10 @@ declare(strict_types=1); namespace Stancl\Tenancy\Database\TenantDatabaseManagers; -use Illuminate\Database\Connection; -use Illuminate\Support\Facades\DB; -use Stancl\Tenancy\Database\Contracts\TenantDatabaseManager; use Stancl\Tenancy\Database\Contracts\TenantWithDatabase; -use Stancl\Tenancy\Database\Exceptions\NoConnectionSetException; -class PostgreSQLSchemaManager implements TenantDatabaseManager +class PostgreSQLSchemaManager extends TenantDatabaseManager { - /** @var string */ - protected $connection; - - protected function database(): Connection - { - if ($this->connection === null) { - throw new NoConnectionSetException(static::class); - } - - return DB::connection($this->connection); - } - - public function setConnection(string $connection): void - { - $this->connection = $connection; - } - public function createDatabase(TenantWithDatabase $tenant): bool { return $this->database()->statement("CREATE SCHEMA \"{$tenant->database()->getName()}\""); diff --git a/src/Database/TenantDatabaseManagers/SQLiteDatabaseManager.php b/src/Database/TenantDatabaseManagers/SQLiteDatabaseManager.php index 6f3a8f62..59c373a9 100644 --- a/src/Database/TenantDatabaseManagers/SQLiteDatabaseManager.php +++ b/src/Database/TenantDatabaseManagers/SQLiteDatabaseManager.php @@ -6,6 +6,7 @@ namespace Stancl\Tenancy\Database\TenantDatabaseManagers; use Stancl\Tenancy\Database\Contracts\TenantDatabaseManager; use Stancl\Tenancy\Database\Contracts\TenantWithDatabase; +use Throwable; class SQLiteDatabaseManager implements TenantDatabaseManager { @@ -13,7 +14,7 @@ class SQLiteDatabaseManager implements TenantDatabaseManager { try { return file_put_contents(database_path($tenant->database()->getName()), ''); - } catch (\Throwable) { + } catch (Throwable) { return false; } } @@ -22,7 +23,7 @@ class SQLiteDatabaseManager implements TenantDatabaseManager { try { return unlink(database_path($tenant->database()->getName())); - } catch (\Throwable) { + } catch (Throwable) { return false; } } diff --git a/src/Database/TenantDatabaseManagers/TenantDatabaseManager.php b/src/Database/TenantDatabaseManagers/TenantDatabaseManager.php new file mode 100644 index 00000000..f0751f0d --- /dev/null +++ b/src/Database/TenantDatabaseManagers/TenantDatabaseManager.php @@ -0,0 +1,35 @@ +connection)) { + throw new NoConnectionSetException(static::class); + } + + return DB::connection($this->connection); + } + + public function setConnection(string $connection): void + { + $this->connection = $connection; + } + + public function makeConnectionConfig(array $baseConfig, string $databaseName): array + { + $baseConfig['database'] = $databaseName; + + return $baseConfig; + } +} diff --git a/src/Resolvers/DomainTenantResolver.php b/src/Resolvers/DomainTenantResolver.php index 44ec4fdc..eb25ad26 100644 --- a/src/Resolvers/DomainTenantResolver.php +++ b/src/Resolvers/DomainTenantResolver.php @@ -26,9 +26,7 @@ class DomainTenantResolver extends Contracts\CachedTenantResolver /** @var Tenant|null $tenant */ $tenant = config('tenancy.tenant_model')::query() - ->whereHas('domains', function (Builder $query) use ($domain) { - $query->where('domain', $domain); - }) + ->whereHas('domains', fn (Builder $query) => $query->where('domain', $domain)) ->with('domains') ->first();