Modernize the code, make the mysqliConnection easier to use and change mysql command to mariadb

This commit is contained in:
Tim 2025-04-28 12:21:55 +02:00
parent bdf4910694
commit ca0d357629
6 changed files with 25 additions and 51 deletions

4
.env
View File

@ -20,5 +20,5 @@ APP_SECRET=
###< symfony/framework-bundle ###
DATABASE_HOSTNAME=localhost
DATABASE_USER=user
DATABASE_PASSWORD=password
DATABASE_USER=admin
DATABASE_PASSWORD=admin

View File

@ -22,9 +22,3 @@ services:
# add more service definitions when explicit configuration is needed
# please note that last definitions always *replace* previous ones
App\Service\DatabaseCredentials:
arguments:
$hostname: '%env(string:DATABASE_HOSTNAME)%'
$user: '%env(string:DATABASE_USER)%'
$password: '%env(DATABASE_PASSWORD)%'

View File

@ -4,10 +4,13 @@ namespace App\Service;
use Symfony\Component\Process\Process;
class BackupService
readonly class BackupService
{
private const COMMAND_DUMP = 'mariadb-dump';
private const COMMAND_DB = 'mariadb';
public function __construct(
private readonly DatabaseCredentials $credentials
private DatabaseCredentials $credentials
) {}
public function backup(string $db, ?string $fileName = null): string
@ -18,11 +21,11 @@ class BackupService
}
$process = new Process([
'mysqldump',
'-u', $this->credentials->getUser(),
self::COMMAND_DUMP,
'-u', $this->credentials->user,
$db,
]);
$process->setEnv(['MYSQL_PWD' => $this->credentials->getPassword()]);
$process->setEnv(['MYSQL_PWD' => $this->credentials->password]);
$process->start();
$stream = fopen($fileName, 'w+');
@ -40,14 +43,14 @@ class BackupService
public function restore(string $db, string $fileName): void
{
$process = new Process([
'mysql',
'-u', $this->credentials->getUser(),
self::COMMAND_DB,
'-u', $this->credentials->user,
$db,
]);
$stream = fopen($fileName, 'r');
$process->setEnv(['MYSQL_PWD' => $this->credentials->getPassword()]);
$process->setEnv(['MYSQL_PWD' => $this->credentials->password]);
$process->setInput($stream);
$process->run();
}

View File

@ -2,26 +2,13 @@
namespace App\Service;
class DatabaseCredentials
use Symfony\Component\DependencyInjection\Attribute\Autowire;
readonly class DatabaseCredentials
{
public function __construct(
private readonly string $hostname,
private readonly string $user,
private readonly string $password,
#[Autowire('%env(string:DATABASE_HOSTNAME)%')] public string $hostname,
#[Autowire('%env(string:DATABASE_USER)%')] public string $user,
#[Autowire('%env(string:DATABASE_PASSWORD)%')] public string $password,
) {}
public function getHostname(): string
{
return $this->hostname;
}
public function getUser(): string
{
return $this->user;
}
public function getPassword(): string
{
return $this->password;
}
}

View File

@ -5,15 +5,12 @@ namespace App\Service;
use Exception;
use mysqli;
class DatabaseService
readonly class DatabaseService
{
private mysqli $conn;
public function __construct(
private readonly MysqliConnection $service
private MysqliConnection $conn
)
{
$this->conn = $this->service->getConnection();
}
public function listDatabases(): array

View File

@ -5,20 +5,13 @@ namespace App\Service;
use Exception;
use mysqli;
class MysqliConnection
class MysqliConnection extends mysqli
{
private mysqli $connection;
public function __construct(DatabaseCredentials $credentials)
{
$this->connection = new mysqli($credentials->getHostname(), $credentials->getUser(), $credentials->getPassword());
if ($this->connection->connect_error) {
throw new Exception("Connection failed: " . $this->connection->connect_error);
parent::__construct($credentials->hostname, $credentials->user, $credentials->password);
if ($this->connect_error) {
throw new Exception("Connection failed: " . $this->connect_error);
}
}
public function getConnection(): mysqli
{
return $this->connection;
}
}