From eecb885956c87fa06b702c80a5a60e0e8bbe4038 Mon Sep 17 00:00:00 2001 From: Lucas Pirola Date: Thu, 1 Aug 2024 01:37:50 -0300 Subject: [PATCH] Carrega dump do banco de dados se estiver sem a tabela system_role --- .dockerignore | 1 + .github/workflows/tests.yml | 4 +-- src/core/App.php | 50 ++++++++++++++++++++++++++++++++++++- 3 files changed, 52 insertions(+), 3 deletions(-) diff --git a/.dockerignore b/.dockerignore index 299726e8ec..c0356bcaee 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,5 @@ dev +!dev/db/dump.sql var/*/* # **/*.log # # **/*.md diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 4cad632372..66ff962d2a 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -28,7 +28,7 @@ jobs: - name: Add default env values run: | cp .env.sample .env - cp .env.sample app + cp .env.sample app/.env - uses: hoverkraft-tech/compose-action@v1.5.1 with: @@ -79,7 +79,7 @@ jobs: - name: Add default env values run: | cp .env.sample .env - cp .env.sample app + cp .env.sample app/.env - uses: hoverkraft-tech/compose-action@v1.5.1 with: diff --git a/src/core/App.php b/src/core/App.php index d60aee7276..cac5362469 100644 --- a/src/core/App.php +++ b/src/core/App.php @@ -443,13 +443,61 @@ function init(array $config) { $this->_initStorage(); - if(defined('DB_UPDATES_FILE') && file_exists(DB_UPDATES_FILE)) + if(defined('DB_UPDATES_FILE') && file_exists(DB_UPDATES_FILE)) { + $this->_firstDbUpdate(); $this->_dbUpdates(); + } $this->applyHookBoundTo($this, 'app.init:after'); return $this; } + function _firstDbUpdate() + { + try { + // Conectar ao banco de dados usando Doctrine DBAL + $connection = $this->em->getConnection(); + + // Verificar a existência da tabela system_role + $schemaManager = $connection->createSchemaManager(); + $tables = $schemaManager->listTableNames(); + + if (in_array('system_role', $tables)) { + echo 'A tabela "system_role" já existe. Nenhuma ação necessária.'; + } else { + // Ler o arquivo SQL + $sqlFile = PROTECTED_PATH . 'dev/db/dump.sql'; + $sql = file_get_contents($sqlFile); + + if ($sql === false) { + throw new Exception("Erro ao ler o arquivo SQL."); + } + + // Filtrar linhas específicas do psql + // $sqlLines = explode("\n", $sql); + // $filteredSqlLines = array_filter($sqlLines, function ($line) { + // // Remover linhas que começam com '\' + // return !preg_match('/^\\\/', trim($line)); + // }); + + // $filteredSql = implode("\n", $filteredSqlLines); + + // Registrar SQL filtrado para depuração + // file_put_contents('filtered_sql.sql', $filteredSql); + + // Dividir o SQL por ';' para assegurar a execução correta de múltiplas queries + $connection->executeStatement($sql); + echo 'Arquivo SQL executado com sucesso.'; + } + } catch (Exception $e) { + // Reverter a transação em caso de erro + if (isset($connection) && $connection->isTransactionActive()) { + $connection->rollBack(); + } + echo 'Erro ao executar o arquivo SQL: ' . $e->getMessage(); + } + } + /** * Executa a aplicação *