From c32b101093e0bdec5db0f6f604a306d3586c107c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivar=20Conradi=20=C3=98sthus?= Date: Thu, 23 Oct 2014 16:00:51 +0200 Subject: [PATCH] Patch events should update features. --- unleash-server/lib/featureApi.js | 25 +++++++++++++-------- unleash-server/lib/featureDb.js | 35 ++++++++++++++++++++++++++++++ unleash-server/test/eventDbMock.js | 1 - 3 files changed, 51 insertions(+), 10 deletions(-) diff --git a/unleash-server/lib/featureApi.js b/unleash-server/lib/featureApi.js index 2827e17745..4c9264f543 100644 --- a/unleash-server/lib/featureApi.js +++ b/unleash-server/lib/featureApi.js @@ -11,8 +11,8 @@ module.exports = function (app) { }); }); - app.get('/features/:id', function (req, res) { - featureDb.getFeature(req.params.id).then(function (feature) { + app.get('/features/:featureName', function (req, res) { + featureDb.getFeature(req.params.featureName).then(function (feature) { if (feature) { res.json(feature); } else { @@ -45,16 +45,23 @@ module.exports = function (app) { }); app.patch('/features/:featureName', function (req, res) { - var featureName = req.params.featureName; + var featureName = req.params.featureName, + createdBy = req.connection.remoteAddress, + changeRequest = req.body; + + changeRequest.name = featureName; featureDb.getFeature(featureName).then( function () { - var changeRequest = req.body; - var event = {}; - event.type = eventType.featureUpdated; - event.user = req.connection.remoteAddress; - event.data = changeRequest; - res.status(202).end(); + eventStore.create({ + type: eventType.featureUpdated, + createdBy: createdBy, + data: changeRequest + }).then(function () { + res.status(202).end(); + }, function () { + res.status(500).end(); + }); }, function () { res.status(404).end(); diff --git a/unleash-server/lib/featureDb.js b/unleash-server/lib/featureDb.js index 60a2da88e8..e3e5551d13 100644 --- a/unleash-server/lib/featureDb.js +++ b/unleash-server/lib/featureDb.js @@ -21,6 +21,41 @@ eventStore.on(eventType.featureCreated, function (event) { } ); +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'; return new Promise(function (resolve, reject) { diff --git a/unleash-server/test/eventDbMock.js b/unleash-server/test/eventDbMock.js index a610f775b2..1f66edbbad 100644 --- a/unleash-server/test/eventDbMock.js +++ b/unleash-server/test/eventDbMock.js @@ -1,7 +1,6 @@ var Promise = require('bluebird'); function storeEvent(event) { - console.log('using eventDbMock to store: ', event); return new Promise(function (resolve) { resolve(); });