Skip to content

Commit

Permalink
Merge pull request #98 from brunofamiliar/main
Browse files Browse the repository at this point in the history
feat: Convert database factory in singleton
  • Loading branch information
filipedeschamps committed Aug 23, 2021
2 parents 61284bc + f8245cb commit 7ee7ae4
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 47 deletions.
76 changes: 37 additions & 39 deletions infra/database.js
Original file line number Diff line number Diff line change
@@ -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;
4 changes: 1 addition & 3 deletions infra/migrator.js
Original file line number Diff line number Diff line change
@@ -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() {
Expand All @@ -11,7 +11,6 @@ export default function Migrator() {
};

async function listPendingMigrations() {
const database = databaseFactory();
const databaseClient = await database.getNewConnectedClient();
const pendingMigrations = await migrationRunner({
...defaultConfigurations,
Expand All @@ -25,7 +24,6 @@ export default function Migrator() {
}

async function runPendingMigrations() {
const database = databaseFactory();
const databaseClient = await database.getNewConnectedClient();

const migratedMigrations = await migrationRunner({
Expand Down
12 changes: 7 additions & 5 deletions tests/orchestrator.js
Original file line number Diff line number Diff line change
@@ -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}`;
Expand All @@ -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();
},
Expand All @@ -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 {
Expand Down

0 comments on commit 7ee7ae4

Please sign in to comment.