Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 59 additions & 13 deletions api/parts/mgmt/app_users.js
Original file line number Diff line number Diff line change
Expand Up @@ -753,13 +753,15 @@ usersApi.merge = async function(app_id, newAppUser, new_id, old_id, new_device_i
* Inner function to merge user data
* @param {object} newAppUserP - new user data
* @param {object} oldAppUser - old user data
* @param {object} mergeOptions - options provided by plugins for merging
*/
function mergeUserData(newAppUserP, oldAppUser) {
//allow plugins to deal with user mergin properties
function mergeUserData(newAppUserP, oldAppUser, mergeOptions) {
//allow plugins to deal with user merging properties
plugins.dispatch("/i/user_merge", {
app_id: app_id,
newAppUser: newAppUserP,
oldAppUser: oldAppUser
oldAppUser: oldAppUser,
mergeOptions: mergeOptions
}, async function() {
//merge user data
try {
Expand Down Expand Up @@ -805,7 +807,7 @@ usersApi.merge = async function(app_id, newAppUser, new_id, old_id, new_device_i
callback(null, oldAppUser);
}
else {
//we have to merge user data
var results = [];
if (!newAppUser.ls || (newAppUser.ls < oldAppUser.ls)) {
//switching user identity
var temp = oldAppUser._id;
Expand All @@ -825,15 +827,59 @@ usersApi.merge = async function(app_id, newAppUser, new_id, old_id, new_device_i
oldAppUser = newAppUser;
newAppUser = tempDoc;
}
await common.db.collection("app_user_merges").insertOne({
//If we want to ensure order later then for each A->B we should check if there is B->C in progress and wait for it to finish first. So we could recheck using $regex
_id: app_id + "_" + newAppUser.uid + "_" + oldAppUser.uid,
merged_to: newAppUser.uid,
ts: Math.round(new Date().getTime() / 1000),
lu: Math.round(new Date().getTime() / 1000),
t: 0 //tries
}, {ignore_errors: [11000]});
mergeUserData(newAppUser, oldAppUser);

plugins.dispatch("/i/suggest_merged_uid", {
app_id: app_id,
newAppUser: newAppUser,
oldAppUser: oldAppUser,
results: results
}, async function() {
var mergeOptions = {};
//We don't have any suggested routes for merging. Merge by old logic
if (results.length === 0 || (results[0] && results[0].error)) {
if (results[0] && results[0].error) {
log.e("Error while suggesting merged UID: " + JSON.stringify(results[0].error));
}
}
else {
mergeOptions = results[0];
if (oldAppUser.uid === mergeOptions.winner) {
//log.e("Switching documents to keep old user uid instead of new one");
//switching around doc references
var tempDoc2 = oldAppUser;
oldAppUser = newAppUser;
newAppUser = tempDoc2;
newAppUser.did = new_device_id + "";
}
else if (newAppUser.uid !== mergeOptions.winner && oldAppUser.uid !== mergeOptions.winner) {
log.e("ERROR. Double merge change");//Keeping to see if it happens when we test.
//Should never happen. Both should be changed to some new uid
var discarded_uid = newAppUser.uid;
newAppUser.uid = mergeOptions.winner;
newAppUser.did = new_device_id + "";

//Add to merges to update documents
await common.db.collection("app_user_merges").insertOne({
//If we want to ensure order later then for each A->B we should check if there is B->C in progress and wait for it to finish first. So we could recheck using $regex
_id: app_id + "_" + newAppUser.uid + "_" + discarded_uid,
merged_to: newAppUser.uid,
ts: Math.round(new Date().getTime() / 1000),
lu: Math.round(new Date().getTime() / 1000),
t: 0 //tries
}, {ignore_errors: [11000]});
}

}
await common.db.collection("app_user_merges").insertOne({
//If we want to ensure order later then for each A->B we should check if there is B->C in progress and wait for it to finish first. So we could recheck using $regex
_id: app_id + "_" + newAppUser.uid + "_" + oldAppUser.uid,
merged_to: newAppUser.uid,
ts: Math.round(new Date().getTime() / 1000),
lu: Math.round(new Date().getTime() / 1000),
t: 0 //tries
}, {ignore_errors: [11000]});
mergeUserData(newAppUser, oldAppUser, mergeOptions);
});
}

}
Expand Down
3 changes: 3 additions & 0 deletions plugins/times-of-day/tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,9 @@ describe('Testing Times Of Day', function() {
setTimeout(done, 500 * testUtils.testScalingFactor);
});
});
it('Trigger deletion job to run', function(done) {
testUtils.triggerJobToRun("api:mutationManagerJob", done);
});
it('Should get empty data', function(done) {
checkEmptyData(done);
});
Expand Down