Update existing trigger feeds on create instead of failing (#360)

* Update existing triggers on create instead of failing

* Refactoring

* Catch errors...

* Pass correct argument to disable

* Properly update trigger

* Formatting

* Return promise properly

* Valid updated parameters first
diff --git a/action/kafkaFeedWeb.js b/action/kafkaFeedWeb.js
index 1886107..ef18bed 100644
--- a/action/kafkaFeedWeb.js
+++ b/action/kafkaFeedWeb.js
@@ -119,10 +119,15 @@
                 })
                 .then(triggerDoc => {
                     if (!triggerDoc.status.active) {
-                        resolve(common.webResponse(400, `${params.triggerName} cannot be updated because it is disabled`));
+                        return resolve(common.webResponse(400, `${params.triggerName} cannot be updated because it is disabled`));
                     }
+
                     return common.performUpdateParameterValidation(params, triggerDoc)
-                    .then(updatedParams => db.updateTrigger(triggerDoc, updatedParams))
+                    .then(updatedParams => {
+                        return db.disableTrigger(triggerDoc)
+                        .then(() => db.getTrigger(params.triggerName))
+                        .then(doc => db.updateTrigger(doc, updatedParams));
+                    });
                 })
                 .then(() => {
                     console.log('successfully updated the trigger');
diff --git a/action/lib/Database.js b/action/lib/Database.js
index 831ae1a..4cc5d3c 100644
--- a/action/lib/Database.js
+++ b/action/lib/Database.js
@@ -58,7 +58,16 @@
         return new Promise((resolve, reject) => {
             this.db.insert(params, (err, result) => {
                 if(err) {
-                    reject(err);
+                    if(err.statusCode && err.statusCode === 409) {
+                        this.getTrigger(params.triggerName)
+                        .then(doc => this.disableTrigger(doc))
+                        .then(() => this.getTrigger(params.triggerName))
+                        .then(doc => this.updateTrigger(params, {_rev: doc._rev}))
+                        .then(result => resolve(result))
+                        .catch(err => reject(err));
+                    } else {
+                        reject(err);
+                    }
                 } else {
                     resolve(result);
                 }
@@ -122,7 +131,7 @@
         });
     };
 
-    this.updateTrigger = function(existing, params) {
+    this.disableTrigger = function(existing) {
         return new Promise((resolve, reject) => {
             var message = 'Automatically disabled trigger while updating';
             var status = {
@@ -139,27 +148,27 @@
                 }
             });
         })
-        .then(() => this.getTrigger(existing.triggerName))
-        .then(doc => {
-            for (var key in params) {
-                if (params[key] !== undefined) {
-                    doc[key] = params[key];
-                }
-            }
-            var status = {
-                'active': true,
-                'dateChanged': Date.now()
-            };
-            doc.status = status;
+    };
 
-            return new Promise((resolve, reject) => {
-                this.db.insert(doc, (err, result) => {
-                    if(err) {
-                        reject(err);
-                    } else {
-                        resolve(result);
-                    }
-                });
+    this.updateTrigger = function(existing, params) {
+        for (var key in params) {
+            if (params[key] !== undefined) {
+                existing[key] = params[key];
+            }
+        }
+        var status = {
+            'active': true,
+            'dateChanged': Date.now()
+        };
+        existing.status = status;
+
+        return new Promise((resolve, reject) => {
+            this.db.insert(existing, (err, result) => {
+                if(err) {
+                    reject(err);
+                } else {
+                    resolve(result);
+                }
             });
         });
     };
diff --git a/action/messageHubFeedWeb.js b/action/messageHubFeedWeb.js
index e1fb9d8..50e3819 100644
--- a/action/messageHubFeedWeb.js
+++ b/action/messageHubFeedWeb.js
@@ -126,10 +126,15 @@
                 })
                 .then(triggerDoc => {
                     if (!triggerDoc.status.active) {
-                        resolve(common.webResponse(400, `${params.triggerName} cannot be updated because it is disabled`));
+                        return resolve(common.webResponse(400, `${params.triggerName} cannot be updated because it is disabled`));
                     }
+
                     return common.performUpdateParameterValidation(params, triggerDoc)
-                    .then(updatedParams => db.updateTrigger(triggerDoc, updatedParams))
+                    .then(updatedParams => {
+                        return db.disableTrigger(triggerDoc)
+                        .then(() => db.getTrigger(params.triggerName))
+                        .then(doc => db.updateTrigger(doc, updatedParams));
+                    });
                 })
                 .then(() => {
                     console.log('successfully updated the trigger');