mirror of
https://github.com/Unleash/unleash.git
synced 2025-02-04 00:18:01 +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 = {
|
module.exports = {
|
||||||
featureCreated : 'feature-created'
|
featureCreated : 'feature-created',
|
||||||
|
featureUpdated : 'feature-updated'
|
||||||
};
|
};
|
@ -1,8 +1,8 @@
|
|||||||
var db = require('./db'),
|
var eventStore = require('./eventStore'),
|
||||||
eventStore = require('./eventStore'),
|
|
||||||
eventType = require('./eventType'),
|
eventType = require('./eventType'),
|
||||||
featureDb = require('./featureDb');
|
featureDb = require('./featureDb');
|
||||||
|
|
||||||
|
|
||||||
module.exports = function (app) {
|
module.exports = function (app) {
|
||||||
|
|
||||||
app.get('/features', function (req, res) {
|
app.get('/features', function (req, res) {
|
||||||
@ -12,7 +12,7 @@ module.exports = function (app) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
app.get('/features/:id', function (req, res) {
|
app.get('/features/:id', function (req, res) {
|
||||||
db.getFeature.then(function (feature) {
|
featureDb.getFeature(req.params.id).then(function (feature) {
|
||||||
if (feature) {
|
if (feature) {
|
||||||
res.json(feature);
|
res.json(feature);
|
||||||
} else {
|
} else {
|
||||||
@ -25,36 +25,41 @@ module.exports = function (app) {
|
|||||||
var newFeature = req.body,
|
var newFeature = req.body,
|
||||||
createdBy = req.connection.remoteAddress;
|
createdBy = req.connection.remoteAddress;
|
||||||
|
|
||||||
db.getFeature(newFeature.name).then(function (feature) {
|
var handleFeatureExist = function() {
|
||||||
if (feature) {
|
|
||||||
//Todo: error-msg: feature name is already in use
|
|
||||||
res.status(403).end();
|
res.status(403).end();
|
||||||
} else {
|
};
|
||||||
|
|
||||||
|
var handleCreateFeature = function () {
|
||||||
eventStore.create({
|
eventStore.create({
|
||||||
type: eventType.featureCreated,
|
type: eventType.featureCreated,
|
||||||
createdBy: createdBy,
|
createdBy: createdBy,
|
||||||
data: newFeature
|
data: newFeature
|
||||||
}).then(function () {
|
}).then(function () {
|
||||||
res.status(201).end();
|
res.status(201).end();
|
||||||
|
}, function () {
|
||||||
|
res.status(500).end();
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
});
|
|
||||||
|
featureDb.getFeature(newFeature.name).then(handleFeatureExist, handleCreateFeature);
|
||||||
});
|
});
|
||||||
|
|
||||||
app.patch('/features/:featureName', function (req, res) {
|
app.patch('/features/:featureName', function (req, res) {
|
||||||
var featureName = req.params.featureName;
|
var featureName = req.params.featureName;
|
||||||
db.getFeature(featureName).then(function (feature) {
|
|
||||||
if (feature) {
|
featureDb.getFeature(featureName).then(
|
||||||
|
function () {
|
||||||
var changeRequest = req.body;
|
var changeRequest = req.body;
|
||||||
var event = {};
|
var event = {};
|
||||||
event.type = 'feature-update';
|
event.type = eventType.featureUpdated;
|
||||||
event.user = req.connection.remoteAddress;
|
event.user = req.connection.remoteAddress;
|
||||||
event.data = changeRequest;
|
event.data = changeRequest;
|
||||||
res.status(202).end();
|
res.status(202).end();
|
||||||
} else {
|
},
|
||||||
|
function () {
|
||||||
res.status(404).end();
|
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) {
|
function mapToToggle(row) {
|
||||||
return {
|
return {
|
||||||
name: row.name,
|
name: row.name,
|
||||||
@ -41,6 +57,7 @@ function mapToToggle(row) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
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 = {
|
module.exports = {
|
||||||
getFeatures: function() {
|
getFeatures: function() {
|
||||||
return new Promise(function (resolve) {
|
return new Promise(function (resolve) {
|
||||||
resolve(features);
|
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