Files
dbconnector/paramLibrary.js

142 lines
4.2 KiB
JavaScript

// /services/dbconnector/paramLibrary.js
const sql = require('mssql');
const oracledb = require('oracledb');
// Load paramsConfig.json once at the start
let paramsConfig;
try {
paramsConfig = require('./paramsConfig.json');
} catch (error) {
console.error('Error reading JSON config:', error);
}
/**
* Formats query parameters based on their keys and types, specific to each database type.
*
* @param {Object} params - An object containing the parameters to format.
* @returns {Promise<Object>} A promise that resolves with formatted parameters.
*/
async function formatQueryParams(params) {
const { DB_TYPE } = process.env;
let formattedParams = {};
console.log(`Formatting query parameters for ${DB_TYPE.toUpperCase()}...`); // Debugging log
console.log('Raw params:', params); // Log the raw parameters received
switch (DB_TYPE.toUpperCase()) {
case 'MSSQL':
formattedParams = formatMSSQLParams(params, paramsConfig.mssql);
break;
case 'MARIADB':
formattedParams = formatMariaDBParams(params, paramsConfig.mariaDB);
break;
default:
throw new Error('Unsupported database type');
}
console.log('Formatted params:', formattedParams); // Log the formatted parameters
return formattedParams;
}
/**
* Formats query parameters for MSSQL.
*
* @param {Object} params - An object containing the parameters to format.
* @param {Object} config - Database-specific configuration from JSON.
* @returns {Object} Formatted parameters.
*/
function formatMSSQLParams(params, config) {
const formattedParams = {};
for (const key in params) {
if (!config[key]) {
console.warn(`Parameter '${key}' not defined in the configuration.`);
continue;
}
const paramConfig = config[key];
let type;
switch (paramConfig.type.toLowerCase()) {
case 'uniqueidentifier':
type = sql.UniqueIdentifier;
break;
case 'nvarchar':
if (!paramConfig.maxLength) {
throw new Error(`Parameter '${key}' is missing maxLength in configuration.`);
}
type = sql.NVarChar(paramConfig.maxLength);
break;
case 'text':
type = sql.Text;
break;
case 'int':
type = sql.Int;
break;
case 'bit':
type = sql.Bit;
break;
default:
throw new Error(`Unsupported parameter type: ${paramConfig.type} for parameter '${key}'`);
}
formattedParams[key] = { type, value: params[key] };
}
return formattedParams;
}
/**
* Formats query parameters for MariaDB.
*
* @param {Object} params - An object containing the parameters to format.
* @param {Object} config - Database-specific configuration from JSON.
* @returns {Object} Formatted parameters.
*/
function formatMariaDBParams(params, config) {
const formattedParams = {};
for (const key in params) {
if (!config[key]) {
console.warn(`Parameter '${key}' not defined in the configuration.`);
continue;
}
const paramConfig = config[key];
let type;
switch (paramConfig.type.toLowerCase()) {
case 'char':
if (!paramConfig.length) {
throw new Error(`Parameter '${key}' is missing length in configuration.`);
}
type = { type: 'CHAR', length: paramConfig.length };
break;
case 'uuid':
type = 'uuid';
break;
case 'string':
type = 'string';
break;
case 'text':
type = 'text';
break;
case 'int':
type = 'int';
break;
case 'boolean':
type = 'boolean';
break;
default:
throw new Error(`Unsupported parameter type: ${paramConfig.type} for parameter '${key}'`);
}
formattedParams[key] = { type, value: params[key] };
}
return formattedParams;
}
module.exports = { formatQueryParams };