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

78 lines
1.8 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.");
}
}