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:
parent
7b5cf3de2d
commit
7e48350b83
@ -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
|
||||
};
|
@ -1,3 +1,4 @@
|
||||
module.exports = {
|
||||
featureCreated : 'feature-created'
|
||||
featureCreated : 'feature-created',
|
||||
featureUpdated : 'feature-updated'
|
||||
};
|
@ -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();
|
||||
}
|
||||
});
|
||||
);
|
||||
});
|
||||
|
||||
};
|
||||
|
@ -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
|
||||
};
|
||||
|
||||
|
@ -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"
|
||||
}
|
||||
}
|
||||
];
|
@ -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");
|
||||
}
|
||||
}
|
||||
};
|
Loading…
Reference in New Issue
Block a user