diff --git a/infra/database.js b/infra/database.js index f447260cb..a916d8ae1 100644 --- a/infra/database.js +++ b/infra/database.js @@ -1,42 +1,40 @@ + import { Pool } from "pg"; -export default function DatabaseFactory() { - const poolConfiguration = { - user: process.env.POSTGRES_USER, - host: process.env.POSTGRES_HOST, - database: process.env.POSTGRES_DB, - password: process.env.POSTGRES_PASSWORD, - port: process.env.POSTGRES_PORT, - ssl: { - rejectUnauthorized: false, - }, - }; - - // https://github.com/filipedeschamps/tabnews.com.br/issues/84 - if ( - ["test", "development"].includes(process.env.NODE_ENV) || - process.env.CI - ) { - delete poolConfiguration.ssl; - } - - const pool = new Pool(poolConfiguration); - - async function query(query) { - const results = await pool.query(query); - return results; - } - - async function getNewConnectedClient() { - // When manually creating a new connection like this, - // you need to make sure to close it afterward - // with the .end() method. - return await pool.connect(); - } - - return { - query, - getNewConnectedClient, - pool, - }; +const poolConfiguration = { + user: process.env.POSTGRES_USER, + host: process.env.POSTGRES_HOST, + database: process.env.POSTGRES_DB, + password: process.env.POSTGRES_PASSWORD, + port: process.env.POSTGRES_PORT, + ssl: { + rejectUnauthorized: false, + }, +}; + +// https://github.com/filipedeschamps/tabnews.com.br/issues/84 +if (["test", "development"].includes(process.env.NODE_ENV) || process.env.CI) { + delete poolConfiguration.ssl; +} + +const pool = new Pool(poolConfiguration); + +async function query(query, params) { + return await pool.query(query, params);; } + +async function getNewConnectedClient() { + // When manually creating a new connection like this, + // you need to make sure to close it afterward + // with the .end() method. + return await pool.connect(); +} + +const instance = { + query, + getNewConnectedClient, +} + +Object.freeze(instance) + +export default instance; \ No newline at end of file diff --git a/infra/migrator.js b/infra/migrator.js index 02e096390..92cb00d0c 100644 --- a/infra/migrator.js +++ b/infra/migrator.js @@ -1,5 +1,5 @@ const { join, resolve } = require("path"); -import databaseFactory from "infra/database.js"; +import database from "infra/database.js"; import migrationRunner from "node-pg-migrate"; export default function Migrator() { @@ -11,7 +11,6 @@ export default function Migrator() { }; async function listPendingMigrations() { - const database = databaseFactory(); const databaseClient = await database.getNewConnectedClient(); const pendingMigrations = await migrationRunner({ ...defaultConfigurations, @@ -25,7 +24,6 @@ export default function Migrator() { } async function runPendingMigrations() { - const database = databaseFactory(); const databaseClient = await database.getNewConnectedClient(); const migratedMigrations = await migrationRunner({ diff --git a/tests/orchestrator.js b/tests/orchestrator.js index 7ca0e04aa..9c9ea8a56 100644 --- a/tests/orchestrator.js +++ b/tests/orchestrator.js @@ -1,6 +1,6 @@ import fetch from "cross-fetch"; import retry from "async-retry"; -import databaseFactory from "infra/database.js"; +import database from "infra/database.js"; export default function orchestratorFactory() { const webserverUrl = `http://${process.env.WEBSERVER_HOST}:${process.env.WEBSERVER_PORT}`; @@ -24,7 +24,6 @@ export default function orchestratorFactory() { async function waitForDatabase() { return await retry( async () => { - const database = databaseFactory(); const connection = await database.getNewConnectedClient(); await connection.end(); }, @@ -36,9 +35,12 @@ export default function orchestratorFactory() { } async function dropAllTables() { - const database = databaseFactory(); - await database.query("drop schema public cascade; create schema public;"); - await database.pool.end(); + const databaseClient = await database.getNewConnectedClient(); + await databaseClient.query( + "drop schema public cascade; create schema public;" + ); + + await databaseClient.end() } return {