Files
mariavel/backend/app/Services/DatabaseService.php
T

126 lines
2.9 KiB
PHP

<?php
namespace App\Services;
use App\Contracts\DatabaseDriverInterface;
use App\Contracts\SchemaDiscoveryInterface;
class DatabaseService
{
protected ?DatabaseDriverInterface $driver = null;
/**
* Set the database driver.
*/
public function setDriver(DatabaseDriverInterface $driver): self
{
$this->driver = $driver;
return $this;
}
/**
* Get the current driver.
*
* @throws \Exception
*/
public function getDriver(): DatabaseDriverInterface
{
if (!$this->driver) {
throw new \Exception("Database driver not initialized.");
}
return $this->driver;
}
/**
* Establish a connection.
*/
public function connect(array $config): bool
{
return $this->getDriver()->connect($config);
}
/**
* Get all databases.
*/
public function getDatabases(): array
{
$driver = $this->getDriver();
if ($driver instanceof SchemaDiscoveryInterface) {
return $driver->getDatabases();
}
throw new \Exception("Driver does not support schema discovery.");
}
/**
* Get all tables.
*/
public function getTables(): array
{
$driver = $this->getDriver();
if ($driver instanceof SchemaDiscoveryInterface) {
return $driver->getTables();
}
throw new \Exception("Driver does not support schema discovery.");
}
/**
* Get table schema.
*/
public function getTableSchema(string $table): array
{
$driver = $this->getDriver();
if ($driver instanceof SchemaDiscoveryInterface) {
return $driver->getTableSchema($table);
}
throw new \Exception("Driver does not support schema discovery.");
}
/**
* Get table data.
*/
public function getTableData(string $table, int $limit = 100, int $offset = 0): array
{
return $this->getDriver()->getTableData($table, $limit, $offset);
}
/**
* Get table row count.
*/
public function getTableCount(string $table): int
{
return $this->getDriver()->getTableCount($table);
}
/**
* Execute a raw SQL query.
*/
public function executeQuery(string $sql, array $bindings = []): array
{
return $this->getDriver()->query($sql, $bindings);
}
/**
* Export the database.
*/
public function export(array $config): string
{
return $this->getDriver()->export($config);
}
/**
* Import the database.
*/
public function import(array $config, string $filePath): bool
{
return $this->getDriver()->import($config, $filePath);
}
/**
* Get database metadata.
*/
public function getDatabaseMetadata(string $database): array
{
return $this->getDriver()->getDatabaseMetadata($database);
}
}