Files
workbloomerp-backend/app/Shared/Services/DBService.php
T
Claudecio Martins a951944997 first commit
2026-06-16 10:04:10 -03:00

76 lines
2.0 KiB
PHP

<?php
namespace WorkbloomERP\Services;
use Throwable;
use KrothiumAPI\Database\DBManager;
class DBService {
protected string $connection;
protected ?string $schema;
public function __construct(string $connection = 'DEFAULT', ?string $schema = 'shared') {
$this->schema = $schema;
$this->connection = strtoupper(string: $connection);
}
/**
* Executa dentro de transação
*/
public function transaction(callable $callback): mixed {
DBManager::beginTransaction(connectionName: $this->connection, schema: $this->schema);
try {
$result = $callback($this);
DBManager::commit(connectionName: $this->connection, schema: $this->schema);
return $result;
} catch (Throwable $e) {
DBManager::rollback(connectionName: $this->connection, schema: $this->schema);
throw $e;
}
}
/**
* Executa query sem retorno
*/
public function execute(string $sql, array $params = []): bool {
return DBManager::execute(
sql: $sql,
params: $params,
connectionName: $this->connection,
schema: $this->schema
);
}
/**
* Retorna um único registro
*/
public function fetchOne(string $sql, array $params = []): ?array {
return DBManager::fetchOne(
sql: $sql,
params: $params,
connectionName: $this->connection,
schema: $this->schema
);
}
/**
* Retorna múltiplos registros
*/
public function fetchAll(string $sql, array $params = []): array {
return DBManager::fetchAll(
sql: $sql,
params: $params,
connectionName: $this->connection,
schema: $this->schema
);
}
/**
* Último ID inserido (via PDO interno do driver)
*/
public function lastInsertId(): string {
return DBManager::lastInsertId(
connectionName: $this->connection,
schema: $this->schema
);
}
}