lbpersonalbests will now resist even when clearing personal bests - will only be overridden if a new higher wpm was found than the one stored

This commit is contained in:
Jack 2021-09-07 15:04:16 +01:00
parent febee299ba
commit 9140e1654b
2 changed files with 24 additions and 28 deletions

View file

@ -174,8 +174,12 @@ class UsersDAO {
return false;
}
let lbpb = user.lbPersonalBests;
if (!lbpb) lbpb = {};
let pb = checkAndUpdatePb(
user.personalBests,
lbpb,
mode,
mode2,
acc,
@ -191,10 +195,10 @@ class UsersDAO {
await mongoDB()
.collection("users")
.updateOne({ uid }, { $set: { personalBests: pb.obj } });
if (pb.lbPb) {
if (pb.lbObj) {
await mongoDB()
.collection("users")
.updateOne({ uid }, { $set: { lbPersonalBests: pb.lbPb } });
.updateOne({ uid }, { $set: { lbPersonalBests: pb.lbObj } });
}
return true;
} else {
@ -246,6 +250,7 @@ class UsersDAO {
tagsToCheck.forEach(async (tag) => {
let tagpb = checkAndUpdatePb(
tag.personalBests,
undefined,
mode,
mode2,
acc,

View file

@ -43,6 +43,7 @@ custom: {
module.exports = {
checkAndUpdatePb(
obj,
lbObj,
mode,
mode2,
acc,
@ -96,17 +97,15 @@ module.exports = {
});
}
let lbPb;
if (isPb && mode === "time" && (mode2 == "15" || mode2 == "60")) {
lbPb = {
time: {
15: {},
60: {},
},
};
if (lbObj && mode === "time" && (mode2 == "15" || mode2 == "60")) {
//updating lbpersonalbests object
//verify structure first
if (lbObj[mode] === undefined) lbObj[mode] = {};
if (lbObj[mode][mode2] === undefined) lbObj[mode][mode2] = {};
let bestForEveryLanguage = {};
if (obj?.time?.[15]) {
obj.time[15].forEach((pb) => {
if (obj?.[mode]?.[mode2]) {
obj[mode][mode2].forEach((pb) => {
if (!bestForEveryLanguage[pb.language]) {
bestForEveryLanguage[pb.language] = pb;
} else {
@ -116,30 +115,22 @@ module.exports = {
}
});
Object.keys(bestForEveryLanguage).forEach((key) => {
lbPb.time[15][key] = bestForEveryLanguage[key];
if (lbObj[mode][mode2][key] === undefined) {
lbObj[mode][mode2][key] = bestForEveryLanguage[key];
} else {
if (lbObj[mode][mode2][key].wpm < bestForEveryLanguage[key].wpm) {
lbObj[mode][mode2][key] = bestForEveryLanguage[key];
}
}
});
bestForEveryLanguage = {};
}
if (obj?.time?.[60]) {
obj.time[60].forEach((pb) => {
if (!bestForEveryLanguage[pb.language]) {
bestForEveryLanguage[pb.language] = pb;
} else {
if (bestForEveryLanguage[pb.language].wpm < pb.wpm) {
bestForEveryLanguage[pb.language] = pb;
}
}
});
Object.keys(bestForEveryLanguage).forEach((key) => {
lbPb.time[60][key] = bestForEveryLanguage[key];
});
}
}
return {
isPb,
obj,
lbPb,
lbObj,
};
},
};