1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-01-31 00:16:47 +01:00

#18 Use real-db instead of dbMock to fetch feature toggles.

This commit is contained in:
Ivar Conradi Østhus 2014-10-23 15:17:04 +02:00
parent 7b5cf3de2d
commit 7e48350b83
6 changed files with 66 additions and 78 deletions

View File

@ -1,28 +0,0 @@
var Promise = require('bluebird');
var featuresMock = require('./featuresMock');
function getFeature(name) {
var featureFound;
featuresMock.forEach(function (feature) {
if (feature.name === name) {
featureFound = feature;
}
});
return Promise.resolve(featureFound);
}
function getFeatures() {
return Promise.resolve(featuresMock);
}
function addFeature(feature) {
featuresMock.push(feature);
return Promise.resolve();
}
module.exports = {
getFeature: getFeature,
getFeatures: getFeatures,
addFeature: addFeature
};

View File

@ -1,3 +1,4 @@
module.exports = {
featureCreated : 'feature-created'
featureCreated : 'feature-created',
featureUpdated : 'feature-updated'
};

View File

@ -1,8 +1,8 @@
var db = require('./db'),
eventStore = require('./eventStore'),
var eventStore = require('./eventStore'),
eventType = require('./eventType'),
featureDb = require('./featureDb');
module.exports = function (app) {
app.get('/features', function (req, res) {
@ -12,7 +12,7 @@ module.exports = function (app) {
});
app.get('/features/:id', function (req, res) {
db.getFeature.then(function (feature) {
featureDb.getFeature(req.params.id).then(function (feature) {
if (feature) {
res.json(feature);
} else {
@ -25,36 +25,41 @@ module.exports = function (app) {
var newFeature = req.body,
createdBy = req.connection.remoteAddress;
db.getFeature(newFeature.name).then(function (feature) {
if (feature) {
//Todo: error-msg: feature name is already in use
res.status(403).end();
} else {
eventStore.create({
type: eventType.featureCreated,
createdBy: createdBy,
data: newFeature
}).then(function() {
res.status(201).end();
});
}
});
var handleFeatureExist = function() {
res.status(403).end();
};
var handleCreateFeature = function () {
eventStore.create({
type: eventType.featureCreated,
createdBy: createdBy,
data: newFeature
}).then(function () {
res.status(201).end();
}, function () {
res.status(500).end();
});
};
featureDb.getFeature(newFeature.name).then(handleFeatureExist, handleCreateFeature);
});
app.patch('/features/:featureName', function (req, res) {
var featureName = req.params.featureName;
db.getFeature(featureName).then(function (feature) {
if (feature) {
featureDb.getFeature(featureName).then(
function () {
var changeRequest = req.body;
var event = {};
event.type = 'feature-update';
event.type = eventType.featureUpdated;
event.user = req.connection.remoteAddress;
event.data = changeRequest;
res.status(202).end();
} else {
},
function () {
res.status(404).end();
}
});
);
});
};

View File

@ -31,6 +31,22 @@ function getFeatures() {
});
}
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,
@ -41,6 +57,7 @@ function mapToToggle(row) {
}
module.exports = {
getFeatures: getFeatures
getFeatures: getFeatures,
getFeature: getFeature
};

View File

@ -1,26 +0,0 @@
module.exports = [
{
"name": "featureX",
"description": "the #1 feature",
"enabled": true,
"strategy": "default"
},
{
"name": "featureY",
"description": "soon to be the #1 feature",
"enabled": false,
"strategy": "baz",
"parameters": {
"foo": "bar"
}
},
{
"name": "featureZ",
"description": "terrible feature",
"enabled": true,
"strategy": "baz",
"parameters": {
"foo": "rab"
}
}
];

View File

@ -27,10 +27,29 @@ var features = [
}
];
function getFeature(name) {
var featureFound;
features.forEach(function (feature) {
if (feature.name === name) {
featureFound = feature;
}
});
return featureFound;
}
module.exports = {
getFeatures: function() {
return new Promise(function (resolve) {
resolve(features);
});
},
getFeature: function(name) {
var feature = getFeature(name);
if(feature) {
return Promise.resolve(feature);
} else {
return Promise.reject("feature not found");
}
}
};