var eventStore = require('./eventStore'), eventType = require('./eventType'), featureDb = require('./featureDb'); module.exports = function (app) { app.get('/features', function (req, res) { featureDb.getFeatures().then(function (features) { res.json({features: features}); }); }); app.get('/features/:featureName', function (req, res) { featureDb.getFeature(req.params.featureName).then(function (feature) { if (feature) { res.json(feature); } else { res.json(404, {error: 'Could not find feature'}); } }); }); app.post('/features', function (req, res) { var newFeature = req.body, createdBy = req.connection.remoteAddress; 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, createdBy = req.connection.remoteAddress, changeRequest = req.body; changeRequest.name = featureName; featureDb.getFeature(featureName).then( function () { 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(); } ); }); };