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');