feat: implement MySQL database driver and API service for schema management and data operations

This commit is contained in:
Ümit Tunç
2026-04-24 22:43:28 +03:00
parent 22ff72d39c
commit e75657d22a
6 changed files with 137 additions and 19 deletions
+58 -5
View File
@@ -64,15 +64,68 @@ class MySqlDriver implements DatabaseDriverInterface, SchemaDiscoveryInterface
return $this->query("DESCRIBE `{$table}`");
}
public function getTableData(string $table, int $limit = 100, int $offset = 0): array
public function getTableData(string $table, int $limit = 100, int $offset = 0, array $filters = []): array
{
return $this->query("SELECT * FROM `{$table}` LIMIT ? OFFSET ?", [$limit, $offset]);
$query = DB::connection($this->connectionName)->table($table);
$this->applyFilters($query, $filters);
return $query->limit($limit)->offset($offset)->get()->all();
}
public function getTableCount(string $table): int
public function getTableCount(string $table, array $filters = []): int
{
$result = $this->query("SELECT COUNT(*) as count FROM `{$table}`");
return (int) ($result[0]->count ?? 0);
$query = DB::connection($this->connectionName)->table($table);
$this->applyFilters($query, $filters);
return $query->count();
}
protected function applyFilters($query, array $filters)
{
if (empty($filters)) return $query;
foreach ($filters as $filter) {
$field = $filter['field'] ?? ($filter['columnField'] ?? null);
$operator = $filter['operator'] ?? ($filter['operatorValue'] ?? null);
$value = $filter['value'] ?? null;
if (!$field) continue;
switch ($operator) {
case 'contains':
$query->where($field, 'LIKE', "%{$value}%");
break;
case 'equals':
case '=':
$query->where($field, '=', $value);
break;
case 'startsWith':
$query->where($field, 'LIKE', "{$value}%");
break;
case 'endsWith':
$query->where($field, 'LIKE', "%{$value}");
break;
case 'isEmpty':
$query->where(function($q) use ($field) {
$q->whereNull($field)->orWhere($field, '');
});
break;
case 'isNotEmpty':
$query->whereNotNull($field)->where($field, '!=', '');
break;
case 'isAnyOf':
if (is_array($value)) {
$query->whereIn($field, $value);
}
break;
case '>':
case '<':
case '>=':
case '<=':
case '!=':
$query->where($field, $operator, $value);
break;
}
}
return $query;
}
public function getForeignKeys(string $table): array
+4 -4
View File
@@ -78,17 +78,17 @@ class DatabaseService
/**
* Get table data.
*/
public function getTableData(string $table, int $limit = 100, int $offset = 0): array
public function getTableData(string $table, int $limit = 100, int $offset = 0, array $filters = []): array
{
return $this->getDriver()->getTableData($table, $limit, $offset);
return $this->getDriver()->getTableData($table, $limit, $offset, $filters);
}
/**
* Get table row count.
*/
public function getTableCount(string $table): int
public function getTableCount(string $table, array $filters = []): int
{
return $this->getDriver()->getTableCount($table);
return $this->getDriver()->getTableCount($table, $filters);
}
/**