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

general refactor, move more classes under Database namespace

This commit is contained in:
Samuel Štancl 2022-08-27 03:17:16 +02:00
parent 2d7e9dfd89
commit 40bf28c7d0
41 changed files with 122 additions and 133 deletions

View file

@ -6,7 +6,7 @@ namespace Stancl\Tenancy\Bootstrappers;
use Stancl\Tenancy\Contracts\TenancyBootstrapper;
use Stancl\Tenancy\Contracts\Tenant;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\DatabaseManager;
use Stancl\Tenancy\Exceptions\TenantDatabaseDoesNotExistException;

View file

@ -6,6 +6,8 @@ namespace Stancl\Tenancy;
use Illuminate\Cache\CacheManager as BaseCacheManager;
// todo move to Cache namespace?
class CacheManager extends BaseCacheManager
{
/**

View file

@ -1,15 +0,0 @@
<?php
declare(strict_types=1);
namespace Stancl\Tenancy\Contracts;
use Stancl\Tenancy\DatabaseConfig;
interface TenantWithDatabase extends Tenant
{
public function database(): DatabaseConfig;
/** Get an internal key. */
public function getInternal(string $key): mixed;
}

View file

@ -4,12 +4,13 @@ declare(strict_types=1);
namespace Stancl\Tenancy\Controllers;
use Closure;
use Illuminate\Routing\Controller;
use Throwable;
class TenantAssetsController extends Controller
{
public static $tenancyMiddleware = 'Stancl\Tenancy\Middleware\InitializeTenancyByDomain';
public static string|array|Closure $tenancyMiddleware = Stancl\Tenancy\Middleware\InitializeTenancyByDomain::class;
public function __construct()
{
@ -22,7 +23,7 @@ class TenantAssetsController extends Controller
try {
return response()->file(storage_path("app/public/$path"));
} catch (Throwable $th) {
} catch (Throwable) {
abort(404);
}
}

View file

@ -2,9 +2,9 @@
declare(strict_types=1);
namespace Stancl\Tenancy\Concerns;
namespace Stancl\Tenancy\Database\Concerns;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\Contracts\TenantWithDatabase;
trait CreatesDatabaseUsers
{

View file

@ -4,8 +4,8 @@ declare(strict_types=1);
namespace Stancl\Tenancy\Database\Concerns;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\DatabaseConfig;
use Stancl\Tenancy\Database\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\DatabaseConfig;
trait HasDatabase
{

View file

@ -2,6 +2,7 @@
declare(strict_types=1);
// todo not sure if this should be in Database\
namespace Stancl\Tenancy\Database\Concerns;
use Stancl\Tenancy\Contracts\Domain;

View file

@ -2,11 +2,9 @@
declare(strict_types=1);
namespace Stancl\Tenancy\Contracts;
namespace Stancl\Tenancy\Database\Contracts;
use Stancl\Tenancy\DatabaseConfig;
// todo possibly move to Database namespace, along with other classes
use Stancl\Tenancy\Database\DatabaseConfig;
interface ManagesDatabaseUsers extends TenantDatabaseManager
{

View file

@ -2,9 +2,9 @@
declare(strict_types=1);
namespace Stancl\Tenancy\Contracts;
namespace Stancl\Tenancy\Database\Contracts;
use Stancl\Tenancy\Exceptions\NoConnectionSetException;
use Stancl\Tenancy\Database\Exceptions\NoConnectionSetException;
interface TenantDatabaseManager
{

View file

@ -0,0 +1,13 @@
<?php
declare(strict_types=1);
namespace Stancl\Tenancy\Database\Contracts;
use Stancl\Tenancy\Contracts\Tenant;
use Stancl\Tenancy\Database\DatabaseConfig;
interface TenantWithDatabase extends Tenant
{
public function database(): DatabaseConfig;
}

View file

@ -2,30 +2,24 @@
declare(strict_types=1);
namespace Stancl\Tenancy;
namespace Stancl\Tenancy\Database;
use Closure;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
use Stancl\Tenancy\Contracts\ManagesDatabaseUsers;
use Stancl\Tenancy\Contracts\TenantDatabaseManager;
use Stancl\Tenancy\Contracts\TenantWithDatabase as Tenant;
use Stancl\Tenancy\Exceptions\DatabaseManagerNotRegisteredException;
use Stancl\Tenancy\Database\Contracts\TenantWithDatabase as Tenant;
class DatabaseConfig
{
/** @var Tenant|Model */
public $tenant;
// todo docblocks
public Tenant&Model $tenant;
/** @var callable */
public static $usernameGenerator;
public static Closure $usernameGenerator;
/** @var callable */
public static $passwordGenerator;
public static Closure $passwordGenerator;
/** @var callable */
public static $databaseNameGenerator;
public static Closure $databaseNameGenerator;
public static function __constructStatic(): void
{
@ -86,7 +80,7 @@ class DatabaseConfig
{
$this->tenant->setInternal('db_name', $this->getName() ?? (static::$databaseNameGenerator)($this->tenant));
if ($this->manager() instanceof ManagesDatabaseUsers) {
if ($this->manager() instanceof Contracts\ManagesDatabaseUsers) {
$this->tenant->setInternal('db_username', $this->getUsername() ?? (static::$usernameGenerator)($this->tenant));
$this->tenant->setInternal('db_password', $this->getPassword() ?? (static::$passwordGenerator)($this->tenant));
}
@ -143,20 +137,18 @@ class DatabaseConfig
}, []);
}
/**
* Get the TenantDatabaseManager for this tenant's connection.
*/
public function manager(): TenantDatabaseManager
/** Get the TenantDatabaseManager for this tenant's connection. */
public function manager(): Contracts\TenantDatabaseManager
{
$driver = config("database.connections.{$this->getTemplateConnectionName()}.driver");
$databaseManagers = config('tenancy.database.managers');
if (! array_key_exists($driver, $databaseManagers)) {
throw new DatabaseManagerNotRegisteredException($driver);
throw new Exceptions\DatabaseManagerNotRegisteredException($driver);
}
/** @var TenantDatabaseManager $databaseManager */
/** @var Contracts\TenantDatabaseManager $databaseManager */
$databaseManager = app($databaseManagers[$driver]);
$databaseManager->setConnection($this->getTemplateConnectionName());

View file

@ -7,14 +7,8 @@ namespace Stancl\Tenancy\Database;
use Illuminate\Config\Repository;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Database\DatabaseManager as BaseDatabaseManager;
use Stancl\Tenancy\Contracts\ManagesDatabaseUsers;
use Stancl\Tenancy\Contracts\TenantCannotBeCreatedException;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Exceptions\DatabaseManagerNotRegisteredException;
use Stancl\Tenancy\Exceptions\TenantDatabaseAlreadyExistsException;
use Stancl\Tenancy\Exceptions\TenantDatabaseUserAlreadyExistsException;
// todo move to Database namespace
use Stancl\Tenancy\Database\Contracts\TenantWithDatabase;
/**
* @internal Class is subject to breaking changes in minor and patch versions.
@ -97,11 +91,11 @@ class DatabaseManager
$manager = $tenant->database()->manager();
if ($manager->databaseExists($database = $tenant->database()->getName())) {
throw new TenantDatabaseAlreadyExistsException($database);
throw new Exceptions\TenantDatabaseAlreadyExistsException($database);
}
if ($manager instanceof ManagesDatabaseUsers && $manager->userExists($username = $tenant->database()->getUsername())) {
throw new TenantDatabaseUserAlreadyExistsException($username);
if ($manager instanceof Contracts\ManagesDatabaseUsers && $manager->userExists($username = $tenant->database()->getUsername())) {
throw new Exceptions\TenantDatabaseUserAlreadyExistsException($username);
}
}
}

View file

@ -0,0 +1,15 @@
<?php
declare(strict_types=1);
namespace Stancl\Tenancy\Database\Exceptions;
use Exception;
class DatabaseManagerNotRegisteredException extends Exception
{
public function __construct(string $driver)
{
parent::__construct("Database manager for driver $driver is not registered.");
}
}

View file

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace Stancl\Tenancy\Exceptions;
namespace Stancl\Tenancy\Database\Exceptions;
use Exception;

View file

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace Stancl\Tenancy\Exceptions;
namespace Stancl\Tenancy\Database\Exceptions;
use Stancl\Tenancy\Contracts\TenantCannotBeCreatedException;

View file

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace Stancl\Tenancy\Exceptions;
namespace Stancl\Tenancy\Database\Exceptions;
use Exception;

View file

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace Stancl\Tenancy\Exceptions;
namespace Stancl\Tenancy\Database\Exceptions;
use Stancl\Tenancy\Contracts\TenantCannotBeCreatedException;

View file

@ -4,13 +4,13 @@ declare(strict_types=1);
// todo likely move all of these classes to Database\
namespace Stancl\Tenancy\TenantDatabaseManagers;
namespace Stancl\Tenancy\Database\TenantDatabaseManagers;
use Illuminate\Database\Connection;
use Illuminate\Support\Facades\DB;
use Stancl\Tenancy\Contracts\TenantDatabaseManager;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Exceptions\NoConnectionSetException;
use Stancl\Tenancy\Database\Contracts\TenantDatabaseManager;
use Stancl\Tenancy\Database\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\Exceptions\NoConnectionSetException;
class MicrosoftSQLDatabaseManager implements TenantDatabaseManager
{

View file

@ -2,13 +2,13 @@
declare(strict_types=1);
namespace Stancl\Tenancy\TenantDatabaseManagers;
namespace Stancl\Tenancy\Database\TenantDatabaseManagers;
use Illuminate\Database\Connection;
use Illuminate\Support\Facades\DB;
use Stancl\Tenancy\Contracts\TenantDatabaseManager;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Exceptions\NoConnectionSetException;
use Stancl\Tenancy\Database\Contracts\TenantDatabaseManager;
use Stancl\Tenancy\Database\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\Exceptions\NoConnectionSetException;
class MySQLDatabaseManager implements TenantDatabaseManager
{

View file

@ -2,11 +2,11 @@
declare(strict_types=1);
namespace Stancl\Tenancy\TenantDatabaseManagers;
namespace Stancl\Tenancy\Database\TenantDatabaseManagers;
use Stancl\Tenancy\Concerns\CreatesDatabaseUsers;
use Stancl\Tenancy\Contracts\ManagesDatabaseUsers;
use Stancl\Tenancy\DatabaseConfig;
use Stancl\Tenancy\Database\Concerns\CreatesDatabaseUsers;
use Stancl\Tenancy\Database\Contracts\ManagesDatabaseUsers;
use Stancl\Tenancy\Database\DatabaseConfig;
class PermissionControlledMySQLDatabaseManager extends MySQLDatabaseManager implements ManagesDatabaseUsers
{

View file

@ -2,13 +2,13 @@
declare(strict_types=1);
namespace Stancl\Tenancy\TenantDatabaseManagers;
namespace Stancl\Tenancy\Database\TenantDatabaseManagers;
use Illuminate\Database\Connection;
use Illuminate\Support\Facades\DB;
use Stancl\Tenancy\Contracts\TenantDatabaseManager;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Exceptions\NoConnectionSetException;
use Stancl\Tenancy\Database\Contracts\TenantDatabaseManager;
use Stancl\Tenancy\Database\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\Exceptions\NoConnectionSetException;
class PostgreSQLDatabaseManager implements TenantDatabaseManager
{

View file

@ -2,13 +2,13 @@
declare(strict_types=1);
namespace Stancl\Tenancy\TenantDatabaseManagers;
namespace Stancl\Tenancy\Database\TenantDatabaseManagers;
use Illuminate\Database\Connection;
use Illuminate\Support\Facades\DB;
use Stancl\Tenancy\Contracts\TenantDatabaseManager;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Exceptions\NoConnectionSetException;
use Stancl\Tenancy\Database\Contracts\TenantDatabaseManager;
use Stancl\Tenancy\Database\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\Exceptions\NoConnectionSetException;
class PostgreSQLSchemaManager implements TenantDatabaseManager
{

View file

@ -2,10 +2,10 @@
declare(strict_types=1);
namespace Stancl\Tenancy\TenantDatabaseManagers;
namespace Stancl\Tenancy\Database\TenantDatabaseManagers;
use Stancl\Tenancy\Contracts\TenantDatabaseManager;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\Contracts\TenantDatabaseManager;
use Stancl\Tenancy\Database\Contracts\TenantWithDatabase;
class SQLiteDatabaseManager implements TenantDatabaseManager
{
@ -13,7 +13,7 @@ class SQLiteDatabaseManager implements TenantDatabaseManager
{
try {
return file_put_contents(database_path($tenant->database()->getName()), '');
} catch (\Throwable $th) {
} catch (\Throwable) {
return false;
}
}
@ -22,7 +22,7 @@ class SQLiteDatabaseManager implements TenantDatabaseManager
{
try {
return unlink(database_path($tenant->database()->getName()));
} catch (\Throwable $th) {
} catch (\Throwable) {
return false;
}
}

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace Stancl\Tenancy\Events;
use Stancl\Tenancy\Contracts\Syncable;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\Contracts\TenantWithDatabase;
class SyncedResourceChangedInForeignDatabase
{

View file

@ -6,7 +6,7 @@ namespace Stancl\Tenancy\Events;
use Illuminate\Database\Eloquent\Model;
use Stancl\Tenancy\Contracts\Syncable;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\Contracts\TenantWithDatabase;
class SyncedResourceSaved
{

View file

@ -1,13 +0,0 @@
<?php
declare(strict_types=1);
namespace Stancl\Tenancy\Exceptions;
class DatabaseManagerNotRegisteredException extends \Exception
{
public function __construct($driver)
{
parent::__construct("Database manager for driver $driver is not registered.");
}
}

View file

@ -2,6 +2,8 @@
declare(strict_types=1);
// todo perhaps create Identification namespace
namespace Stancl\Tenancy\Exceptions;
use Stancl\Tenancy\Contracts\TenantCouldNotBeIdentifiedException;

View file

@ -10,7 +10,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\DatabaseManager;
use Stancl\Tenancy\Events\CreatingDatabase;
use Stancl\Tenancy\Events\DatabaseCreated;

View file

@ -9,7 +9,7 @@ use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Events\DatabaseDeleted;
use Stancl\Tenancy\Events\DeletingDatabase;

View file

@ -8,7 +8,7 @@ use Illuminate\Bus\Queueable;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\Contracts\TenantWithDatabase;
class DeleteDomains
{

View file

@ -10,7 +10,7 @@ use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Artisan;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\Contracts\TenantWithDatabase;
class MigrateDatabase implements ShouldQueue
{

View file

@ -10,7 +10,7 @@ use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Artisan;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\Contracts\TenantWithDatabase;
class SeedDatabase implements ShouldQueue
{

View file

@ -7,6 +7,8 @@ namespace Stancl\Tenancy;
use Ramsey\Uuid\Uuid;
use Stancl\Tenancy\Contracts\UniqueIdentifierGenerator;
// todo move to separate namespace
class UUIDGenerator implements UniqueIdentifierGenerator
{
public static function generate($resource): string