Files
legolog/src/database/database.js
Ben 8dd5c8d63d More joining
Former-commit-id: 690f0bf7b00ecfb89043bbcea77616e8d9913bc4
2022-04-23 00:17:19 +01:00

73 lines
1.7 KiB
JavaScript

const Logger = require('../logger.js');
const { Client } = require('pg');
let connection = null;
let options = {};
async function Connect(incomingOptions) {
Logger.Info('Database Connecting...');
// review options
if (!incomingOptions) {
incomingOptions = {
user: process.env.DATABASE_USER,
host: process.env.DATABASE_HOST,
database: process.env.DATABASE_DB,
password: process.env.DATABASE_PASSWORD,
port: process.env.DATABASE_PORT,
};
}
options = incomingOptions;
connection = await connectToDatabase();
Logger.Info('Database Connected');
}
async function connectToDatabase() {
const con = new Promise((resolve, reject) => {
const psqlClient = new Client(options);
psqlClient.connect();
psqlClient.query('SELECT NOW()', (err, res) => {
if (err) reject(err);
connection = psqlClient;
Logger.Database(`PSQL Time: ${res.rows[0].now}`);
Logger.Database(`Connected to ${options.host}`);
resolve(psqlClient);
});
});
await con;
return connection;
}
async function Query(query, params, callback) {
if (!connection) {
await Connect();
}
// debug moment
Logger.Database(`PSQL Query: ${query.substring(0, 500).trim()}...`);
try {
const result = await connection.query(query, params, callback);
return result;
} catch (err) {
Logger.Database(`PSQL Query Error: ${err.message}`);
connection.query('ROLLBACK TRANSACTION;');
throw err;
}
}
async function Destroy() {
await connection.end();
connection = null;
}
module.exports = {
Connect,
Query,
Destroy,
};