/**
* Model for accessing the core configuration
*
* Database table: configuration
*
*/
class configurations {
/**
* @constructor
* @param {object} logger logger to be used by class instance
*/
constructor(logger) {
// always initialize all instance properties
this._logger = logger;
}
/**
* Returns all configurations from core database table configuration
* @param {function} callback rows or null
*/
getAllConfigurations(callback) {
let query = "SELECT * FROM configuration";
global.coreDb.all(query, [], (err, rows) => {
if (err) {
return null;
} else {
return callback(rows);
}
});
}
/**
* Returns configuration value for given configuration keyword
* @param {string} keyword
* @param {function} callback returns value for keyword as string
*/
getValueForKeyword(keyword, callback) {
let query = "SELECT * FROM `configuration` WHERE keyword = ?";
global.coreDb.all(query, [
keyword
], (err, rows) => {
if (err) {
return null;
} else {
if (rows.length > 0) {
var value = rows[0]['value'];
return callback(value);
} else {
return callback(null);
}
}
});
}
/**
* checks if a keyword exists in configuration table in core database
* @param {string} keyword keyword for configuration setting
* @param {*} callback success (true/false), rows (rows or null)
*/
doesKeywordExists(keyword, callback) {
let query = "SELECT * FROM configuration WHERE keyword = ?";
global.coreDb.all(query, [
keyword
], (err, rows) => {
if (err) {
return null;
} else {
if (rows.length > 0) {
return callback(true, rows);
} else {
return callback(false, null);
}
}
});
}
/**
* Adds a new keyword/value pair to configuration table in core database
* @param {string} keyword keyword of pair
* @param {*} value value of pair
* @param {*} callback success (true/false)
*/
addKeywordAndValue(keyword, value, callback) {
let query = "INSERT INTO configuration (keyword, value) VALUES (?, ?)";
global.coreDb.run(query, [
keyword,
value,
], function (err) {
if (err) {
console.log('MODELS-CONFIGURATION | Error storing new key value pair to database: ' + err.message);
callback(false);
} else {
callback(true);
}
});
}
/**
* updates a value for given keyword in core database table configuration
* @param {string} keyword keyword the value shall be updated for
* @param {*} value value to set
* @param {*} callback success (true / false)
*/
updateValuesForKeyword(reqBody, callback) {
var pairsCount = Object.keys(reqBody).length;
if (pairsCount > 0) {
var index = 1;
global.coreDb.serialize(() => {
for (var key in reqBody) {
if (reqBody.hasOwnProperty(key)) {
var value = reqBody[key];
let query = "INSERT OR REPLACE INTO configuration (id, keyword, value) VALUES ( " +
"(SELECT id FROM configuration WHERE keyword = ?), ?, ?);";
global.coreDb.run(query, [
key,
key,
value
], function (err) {
if (err) {
console.log('MODELS-CONFIGURATION | Error updating key value pair to database: ' + err.message);
} else {
this.updateGlobals(key, value);
console.log('MODELS-CONFIGURATION | Successfully updated key / value in configuration');
}
}.bind(this));
};
};
});
callback(true);
} else {
callback(false);
};
}
/**
* Updates global variables if configuration values change
* @param {string} key
* @param {value} value
*/
updateGlobals(key, value) {
if (key === 'instancename') {
global.serverInstanceName = value;
console.log('MODELS-CONFIGURATION | Successfully updated global.serverInstanceName');
}
}
}
module.exports = configurations;