From 3deada57c65dde8b1839e71e5283eae144565d7c Mon Sep 17 00:00:00 2001 From: Boy132 Date: Wed, 23 Apr 2025 16:02:08 +0200 Subject: [PATCH] Remove `DynamicDatabaseConnection` (#1290) --- app/Extensions/DynamicDatabaseConnection.php | 35 ------------------- app/Models/Database.php | 5 +-- app/Models/DatabaseHost.php | 19 ++++++++++ .../Databases/DatabaseManagementService.php | 6 ---- .../Databases/DatabasePasswordService.php | 4 --- .../Databases/Hosts/HostCreationService.php | 7 +--- .../Databases/Hosts/HostUpdateService.php | 8 ++--- 7 files changed, 23 insertions(+), 61 deletions(-) delete mode 100644 app/Extensions/DynamicDatabaseConnection.php diff --git a/app/Extensions/DynamicDatabaseConnection.php b/app/Extensions/DynamicDatabaseConnection.php deleted file mode 100644 index 147f78064..000000000 --- a/app/Extensions/DynamicDatabaseConnection.php +++ /dev/null @@ -1,35 +0,0 @@ -findOrFail($host); - } - - config()->set('database.connections.' . $connection, [ - 'driver' => self::DB_DRIVER, - 'host' => $host->host, - 'port' => $host->port, - 'database' => $database, - 'username' => $host->username, - 'password' => $host->password, - 'charset' => self::DB_CHARSET, - 'collation' => self::DB_COLLATION, - ]); - } -} diff --git a/app/Models/Database.php b/app/Models/Database.php index 80fac2c38..0b7624cec 100644 --- a/app/Models/Database.php +++ b/app/Models/Database.php @@ -8,7 +8,6 @@ use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; -use Illuminate\Support\Facades\DB; /** * @property int $id @@ -36,8 +35,6 @@ class Database extends Model implements Validatable */ public const RESOURCE_NAME = 'server_database'; - public const DEFAULT_CONNECTION_NAME = 'dynamic'; - /** * The attributes excluded from the model's JSON form. */ @@ -104,7 +101,7 @@ class Database extends Model implements Validatable */ private function run(string $statement): bool { - return DB::connection(self::DEFAULT_CONNECTION_NAME)->statement($statement); + return $this->host->buildConnection()->statement($statement); } /** diff --git a/app/Models/DatabaseHost.php b/app/Models/DatabaseHost.php index c8512c1de..ddaac259c 100644 --- a/app/Models/DatabaseHost.php +++ b/app/Models/DatabaseHost.php @@ -4,10 +4,12 @@ namespace App\Models; use App\Contracts\Validatable; use App\Traits\HasValidation; +use Illuminate\Database\Connection; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; +use Illuminate\Support\Facades\DB; /** * @property int $id @@ -82,4 +84,21 @@ class DatabaseHost extends Model implements Validatable { return $this->hasMany(Database::class); } + + public function buildConnection(string $database = 'mysql', string $charset = 'utf8', string $collation = 'utf8_unicode_ci'): Connection + { + /** @var Connection $connection */ + $connection = DB::build([ + 'driver' => 'mysql', + 'host' => $this->host, + 'port' => $this->port, + 'database' => $database, + 'username' => $this->username, + 'password' => $this->password, + 'charset' => $charset, + 'collation' => $collation, + ]); + + return $connection; + } } diff --git a/app/Services/Databases/DatabaseManagementService.php b/app/Services/Databases/DatabaseManagementService.php index 88146f709..56a723c95 100644 --- a/app/Services/Databases/DatabaseManagementService.php +++ b/app/Services/Databases/DatabaseManagementService.php @@ -7,7 +7,6 @@ use App\Models\Server; use App\Models\Database; use App\Helpers\Utilities; use Illuminate\Database\ConnectionInterface; -use App\Extensions\DynamicDatabaseConnection; use App\Exceptions\Repository\DuplicateDatabaseNameException; use App\Exceptions\Service\Database\TooManyDatabasesException; use App\Exceptions\Service\Database\DatabaseClientFeatureNotEnabledException; @@ -32,7 +31,6 @@ class DatabaseManagementService public function __construct( protected ConnectionInterface $connection, - protected DynamicDatabaseConnection $dynamic, ) {} /** @@ -94,8 +92,6 @@ class DatabaseManagementService return $this->connection->transaction(function () use ($data) { $database = $this->createModel($data); - $this->dynamic->set('dynamic', $data['database_host_id']); - $database->createDatabase($database->database); $database->createUser( $database->username, @@ -122,8 +118,6 @@ class DatabaseManagementService */ public function delete(Database $database): ?bool { - $this->dynamic->set('dynamic', $database->database_host_id); - $database->dropDatabase($database->database); $database->dropUser($database->username, $database->remote); $database->flush(); diff --git a/app/Services/Databases/DatabasePasswordService.php b/app/Services/Databases/DatabasePasswordService.php index 110c5abe5..c2abb1cc5 100644 --- a/app/Services/Databases/DatabasePasswordService.php +++ b/app/Services/Databases/DatabasePasswordService.php @@ -5,7 +5,6 @@ namespace App\Services\Databases; use App\Models\Database; use App\Helpers\Utilities; use Illuminate\Database\ConnectionInterface; -use App\Extensions\DynamicDatabaseConnection; class DatabasePasswordService { @@ -14,7 +13,6 @@ class DatabasePasswordService */ public function __construct( private ConnectionInterface $connection, - private DynamicDatabaseConnection $dynamic, ) {} /** @@ -29,8 +27,6 @@ class DatabasePasswordService $password = Utilities::randomStringWithSpecialCharacters(24); $this->connection->transaction(function () use ($database, $password) { - $this->dynamic->set('dynamic', $database->database_host_id); - $database->update([ 'password' => $password, ]); diff --git a/app/Services/Databases/Hosts/HostCreationService.php b/app/Services/Databases/Hosts/HostCreationService.php index 13dd54bd7..974ef3272 100644 --- a/app/Services/Databases/Hosts/HostCreationService.php +++ b/app/Services/Databases/Hosts/HostCreationService.php @@ -3,9 +3,7 @@ namespace App\Services\Databases\Hosts; use App\Models\DatabaseHost; -use Illuminate\Database\DatabaseManager; use Illuminate\Database\ConnectionInterface; -use App\Extensions\DynamicDatabaseConnection; class HostCreationService { @@ -14,8 +12,6 @@ class HostCreationService */ public function __construct( private ConnectionInterface $connection, - private DatabaseManager $databaseManager, - private DynamicDatabaseConnection $dynamic, ) {} /** @@ -48,8 +44,7 @@ class HostCreationService $host->nodes()->sync(array_get($data, 'node_ids', [])); // Confirm access using the provided credentials before saving data. - $this->dynamic->set('dynamic', $host); - $this->databaseManager->connection('dynamic')->getPdo(); + $host->buildConnection()->getPdo(); return $host; }); diff --git a/app/Services/Databases/Hosts/HostUpdateService.php b/app/Services/Databases/Hosts/HostUpdateService.php index cf9add21f..cafe9b402 100644 --- a/app/Services/Databases/Hosts/HostUpdateService.php +++ b/app/Services/Databases/Hosts/HostUpdateService.php @@ -3,9 +3,7 @@ namespace App\Services\Databases\Hosts; use App\Models\DatabaseHost; -use Illuminate\Database\DatabaseManager; use Illuminate\Database\ConnectionInterface; -use App\Extensions\DynamicDatabaseConnection; class HostUpdateService { @@ -14,8 +12,6 @@ class HostUpdateService */ public function __construct( private ConnectionInterface $connection, - private DatabaseManager $databaseManager, - private DynamicDatabaseConnection $dynamic, ) {} /** @@ -38,8 +34,8 @@ class HostUpdateService return $this->connection->transaction(function () use ($data, $host) { $host->update($data); - $this->dynamic->set('dynamic', $host); - $this->databaseManager->connection('dynamic')->getPdo(); + // Confirm access using the provided credentials before saving data. + $host->buildConnection()->getPdo(); return $host; });