diff --git a/unleash-server/lib/db.js b/unleash-server/lib/db.js deleted file mode 100644 index 37a9fd166b..0000000000 --- a/unleash-server/lib/db.js +++ /dev/null @@ -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 -}; \ No newline at end of file diff --git a/unleash-server/lib/eventType.js b/unleash-server/lib/eventType.js index 045b579145..541ab30f60 100644 --- a/unleash-server/lib/eventType.js +++ b/unleash-server/lib/eventType.js @@ -1,3 +1,4 @@ module.exports = { - featureCreated : 'feature-created' + featureCreated : 'feature-created', + featureUpdated : 'feature-updated' }; \ No newline at end of file diff --git a/unleash-server/lib/featureApi.js b/unleash-server/lib/featureApi.js index ec25836441..2827e17745 100644 --- a/unleash-server/lib/featureApi.js +++ b/unleash-server/lib/featureApi.js @@ -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(); } - }); + ); }); }; diff --git a/unleash-server/lib/featureDb.js b/unleash-server/lib/featureDb.js index f429028669..60a2da88e8 100644 --- a/unleash-server/lib/featureDb.js +++ b/unleash-server/lib/featureDb.js @@ -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 }; diff --git a/unleash-server/lib/featuresMock.js b/unleash-server/lib/featuresMock.js deleted file mode 100644 index 1a652a2392..0000000000 --- a/unleash-server/lib/featuresMock.js +++ /dev/null @@ -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" - } - } -]; \ No newline at end of file diff --git a/unleash-server/test/featureDbMock.js b/unleash-server/test/featureDbMock.js index 7b9548aa21..9ecdf12d58 100644 --- a/unleash-server/test/featureDbMock.js +++ b/unleash-server/test/featureDbMock.js @@ -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"); + } } }; \ No newline at end of file