feat: create DatabaseService to handle driver management and schema discovery operations
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
<?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.");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user