datasquirel/engine/utils/handler.js
2023-07-07 14:58:14 +01:00

93 lines
2.8 KiB
JavaScript

const fs = require("fs");
const parseDbResults = require("./parseDbResults");
/**
* DB handler for specific database
* ==============================================================================
* @async
* @param {object} params - Single object params
* @param {string} params.queryString - SQL string
* @param {string[]?} params.queryValuesArray - Values Array
* @param {string} params.database - Database name
* @param {DSQL_TableSchemaType?} params.tableSchema - Table schema
* @param {string} params.dbHost - Database host
* @param {string} params.dbUsername - Database username
* @param {string} params.dbPassword - Database password
* @param {string?} params.encryptionKey - Encryption key
* @param {string?} params.encryptionSalt - Encryption salt
*
* @returns {Promise<object[]|null>}
*/
module.exports = async function handler({ queryString, queryValuesArray, database, tableSchema, dbHost, dbUsername, dbPassword, encryptionKey, encryptionSalt }) {
const mysql = require("serverless-mysql")({
config: {
host: dbHost,
user: dbUsername,
password: dbPassword,
database: database.toString().replace(/[^a-z0-9\_\-]/g, ""),
charset: "utf8mb4",
},
});
/**
* Declare variables
*
* @description Declare "results" variable
*/
let results;
/**
* Check if query values array is an array
*/
if (!queryString || !queryValuesArray || !Array.isArray(queryValuesArray) || !queryValuesArray[0]) {
return null;
}
/**
* Fetch from db
*
* @description Fetch data from db if no cache
*/
try {
/**
* Run Query
*/
results = await mysql.query(queryString, queryValuesArray);
/**
* Clean up
*/
await mysql.end();
} catch (error) {
/**
* Handle error and clean up
*/
console.log("\x1b[31mDSQL Database Handler ERROR\x1b[0m =>", database, error.message);
/**
* Clean up
*/
await mysql.end();
}
/**
* Return results
*
* @description Return results add to cache if "req" param is passed
*/
if (results && tableSchema) {
try {
const unparsedResults = JSON.parse(JSON.stringify(results));
const parsedResults = await parseDbResults({ unparsedResults: unparsedResults, tableSchema: tableSchema, encryptionKey, encryptionSalt });
return parsedResults;
} catch (error) {
console.log("\x1b[31mDSQL Database Handler ERROR\x1b[0m =>", database, error.message);
return null;
}
} else if (results) {
return JSON.parse(JSON.stringify(results));
} else {
console.log("\x1b[31mDSQL Database Handler No results returned\x1b[0m =>", results);
return null;
}
};