Remove DynamicDatabaseConnection (#1290)

This commit is contained in:
Boy132 2025-04-23 16:02:08 +02:00 committed by GitHub
parent 6427903f9f
commit 3deada57c6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 23 additions and 61 deletions

View File

@ -1,35 +0,0 @@
<?php
namespace App\Extensions;
use App\Models\DatabaseHost;
class DynamicDatabaseConnection
{
public const DB_CHARSET = 'utf8';
public const DB_COLLATION = 'utf8_unicode_ci';
public const DB_DRIVER = 'mysql';
/**
* Adds a dynamic database connection entry to the runtime config.
*/
public function set(string $connection, DatabaseHost|int $host, string $database = 'mysql'): void
{
if (!$host instanceof DatabaseHost) {
$host = DatabaseHost::query()->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,
]);
}
}

View File

@ -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);
}
/**

View File

@ -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;
}
}

View File

@ -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();

View File

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

View File

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

View File

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