/** @module mysql */
require("dotenv").config({
path: process.env.NODE_ENV === "test" ? ".env.test" : ".env",
});
const mysql = require("mysql2");
const pool = mysql.createPool({
host: process.env.MYSQL_HOST,
database: process.env.MYSQL_DATABASE,
user: process.env.MYSQL_USERNAME,
password: process.env.MYSQL_PASSWORD,
port: process.env.MYSQL_PORT || 3306,
});
/**
* Get a connection from the pool
*
* @returns {Promise<mysql.Connection>}
*/
function getConnection() {
return new Promise((res, rej) => {
pool.getConnection((error, connection) => {
if (error) {
rej(error);
} else {
res(connection);
}
});
});
}
module.exports = {
pool,
getConnection,
/**
* Send a query to the database
*
* @param {string} query
* @param {any} ...preparedStatementValues
* @returns {Promise<any>}
*/
query(query, ...preparedStatementValues) {
return new Promise(async (res, rej) => {
// Replace undefined with null
preparedStatementValues = preparedStatementValues.map((value) => {
if (value === undefined) return null;
return value;
});
let connection = await getConnection();
try {
connection.query(
query,
preparedStatementValues,
(error, results, _fields) => {
if (error) {
rej(error);
} else {
res(results);
}
}
);
} finally {
connection.release();
}
});
},
};