Fixed unsubscription bug #49

This commit is contained in:
Andris Reinman 2016-05-25 13:47:14 +03:00
parent f1ffb5dbbd
commit 9a5d723663
4 changed files with 51 additions and 7 deletions

View file

@ -703,7 +703,8 @@ module.exports.changeStatus = (id, listId, campaignId, status, callback) => {
});
}
if (!campaignId) {
// status change is not related to a campaign or it marks message as bounced etc.
if (!campaignId || status > 2) {
return connection.commit(err => {
if (err) {
return connection.rollback(() => {
@ -716,22 +717,62 @@ module.exports.changeStatus = (id, listId, campaignId, status, callback) => {
});
}
connection.query('UPDATE `campaigns` SET `unsubscribed`=`unsubscribed`+1 WHERE `cid`=? LIMIT 1', [campaignId], err => {
connection.query('SELECT `id` FROM `campaigns` WHERE `cid`=? LIMIT 1', [campaignId], (err, rows) => {
if (err) {
return connection.rollback(() => {
connection.release();
return callback(err);
});
}
return connection.commit(err => {
let campaign = rows && rows[0] || false;
if (!campaign) {
// should not happend
return connection.commit(err => {
if (err) {
return connection.rollback(() => {
connection.release();
return callback(err);
});
}
connection.release();
return callback(null, true);
});
}
// we should see only unsubscribe events here but you never know
connection.query('UPDATE `campaigns` SET `unsubscribed`=`unsubscribed`' + (status === 2 ? '+' : '-') + '1 WHERE `cid`=? LIMIT 1', [campaignId], err => {
if (err) {
return connection.rollback(() => {
connection.release();
return callback(err);
});
}
connection.release();
return callback(null, true);
let query = 'UPDATE `campaign__' + campaign.id + '` SET `status`=? WHERE `list`=? AND `subscription`=? LIMIT 1';
let values = [status, listId, id];
// Updated tracker status
connection.query(query, values, err => {
if (err) {
return connection.rollback(() => {
connection.release();
return callback(err);
});
}
return connection.commit(err => {
if (err) {
return connection.rollback(() => {
connection.release();
return callback(err);
});
}
connection.release();
return callback(null, true);
});
});
});
});
});