diff --git a/backend/dao/user.js b/backend/dao/user.js index 7893ed514..401dd0ec8 100644 --- a/backend/dao/user.js +++ b/backend/dao/user.js @@ -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, diff --git a/backend/handlers/pb.js b/backend/handlers/pb.js index cc703e2d5..8d0cc2aaa 100644 --- a/backend/handlers/pb.js +++ b/backend/handlers/pb.js @@ -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, }; }, };