1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-12-22 19:07:54 +01:00
unleash.unleash/lib/featureDb.js
2020-02-20 08:30:13 +01:00

99 lines
2.8 KiB
JavaScript

var eventStore = require('./eventStore'),
eventType = require('./eventType'),
logger = require('./logger'),
Promise = require('bluebird'),
dbPool = require('./dbPool');
eventStore.on(eventType.featureCreated, function (event) {
var sql = 'INSERT INTO features(name, enabled, strategy_name, parameters) VALUES ($1, $2, $3, $4)';
var params = [
event.data.name,
event.data.enabled ? 1 : 0,
event.data.strategy,
event.data.parameters
];
dbPool.query(sql, params, function(err) {
if(err) {
logger.error('Could not insert feature, error was: ', err);
}
});
}
);
eventStore.on(eventType.featureUpdated, function (event) {
var sql, params;
var changeRequest = event.data;
switch (changeRequest.field) {
case 'enabled':
sql = 'UPDATE features SET enabled = $1 WHERE name=$2';
params = [event.data.value ? 1 : 0, event.data.name];
break;
case 'strategy':
sql = 'UPDATE features SET strategy_name = $1 WHERE name=$2';
params = [event.data.value, event.data.name];
break;
case 'parameters':
sql = 'UPDATE features SET parameters = $1 WHERE name=$2';
params = [event.data.value, event.data.name];
break;
default:
break;
}
if(sql && params) {
dbPool.query(sql, params, function(err) {
if(err) {
logger.error('Could not update feature, error was: ', err);
}
});
} else {
logger.error('Could not handle feature-update event', event);
}
}
);
function getFeatures() {
var sql = 'SELECT name, enabled, strategy_name as strategy, parameters FROM features ORDER BY created_at DESC';
return new Promise(function (resolve, reject) {
dbPool.query(sql, function(err, res) {
if(err) {reject(err);}
resolve(res.rows.map(mapToToggle));
});
});
}
function getFeature(name) {
var sql = 'SELECT name, enabled, strategy_name as strategy, parameters FROM features WHERE name=$1';
return new Promise(function (resolve, reject) {
dbPool.query(sql, [name], function(err, res) {
if(err) {reject(err);}
if(res.rows.length === 1) {
resolve(mapToToggle(res.rows[0]));
} else {
reject();
}
});
});
}
function mapToToggle(row) {
return {
name: row.name,
enabled: row.enabled > 0,
strategy: row.strategy,
parameters: row.parameters
};
}
module.exports = {
getFeatures: getFeatures,
getFeature: getFeature
};