made sure only one result per person can be on the leaderboard,

started daily leaderboards
This commit is contained in:
Jack 2020-07-03 23:24:36 +01:00
parent 6ef04c1f34
commit 04f4eee886
3 changed files with 111 additions and 40 deletions

View file

@ -405,30 +405,61 @@ exports.testCompleted = functions.https.onCall((request, response) => {
.collection(`users/${request.uid}/results`)
.add(obj)
.then((e) => {
return checkLeaderboards(request.obj, "global").then((globallb) => {
return checkIfPB(request.uid, request.obj).then((e) => {
let returnobj = {
resultCode: null,
globalLeaderboard: globallb,
};
if (e) {
console.log(
`saved result for ${request.uid} (new PB) - ${JSON.stringify(
request.obj
)}`
);
returnobj.resultCode = 2;
} else {
console.log(
`saved result for ${request.uid} - ${JSON.stringify(
request.obj
)}`
);
returnobj.resultCode = 1;
}
return returnobj;
});
Promise.all([
checkLeaderboards(request.obj, "global"),
checkLeaderboards(request.obj, "daily"),
checkIfPB(request.uid, request.obj),
]).then((values) => {
let globallb = values[0];
let dailylb = values[1];
let ispb = values[2];
console.log(values);
let returnobj = {
resultCode: null,
globalLeaderboard: globallb,
dailyLeaderboard: dailylb,
};
if (ispb) {
console.log(
`saved result for ${request.uid} (new PB) - ${JSON.stringify(
request.obj
)}`
);
returnobj.resultCode = 2;
} else {
console.log(
`saved result for ${request.uid} - ${JSON.stringify(request.obj)}`
);
returnobj.resultCode = 1;
}
return returnobj;
});
// return checkLeaderboards(request.obj, "global").then((globallb) => {
// return checkIfPB(request.uid, request.obj).then((e) => {
// let returnobj = {
// resultCode: null,
// globalLeaderboard: globallb,
// };
// if (e) {
// console.log(
// `saved result for ${request.uid} (new PB) - ${JSON.stringify(
// request.obj
// )}`
// );
// returnobj.resultCode = 2;
// } else {
// console.log(
// `saved result for ${request.uid} - ${JSON.stringify(
// request.obj
// )}`
// );
// returnobj.resultCode = 1;
// }
// return returnobj;
// });
// });
})
.catch((e) => {
console.error(
@ -688,6 +719,32 @@ class Leaderboard {
logBoard() {
console.log(this.board);
}
removeDuplicates(insertedAt, uid) {
//return true if a better result is found
let found = false;
let ret;
if (this.board !== undefined) {
this.board.forEach((entry, index) => {
if (entry.uid === uid) {
if (found) {
//remove duplicate
console.log("removing at " + index);
this.board.splice(index, 1);
if (index > insertedAt) {
//removed old result
ret = false;
} else {
ret = true;
}
} else {
found = true;
}
}
});
}
console.log(ret);
return ret;
}
insert(a) {
let insertedAt = -1;
if (a.mode === this.mode && a.mode2 === this.mode2) {
@ -748,6 +805,14 @@ class Leaderboard {
});
insertedAt = this.board.length - 1;
}
// console.log("before duplicate remove");
// console.log(this.board);
if (insertedAt >= 0) {
if (this.removeDuplicates(insertedAt, a.uid)) {
insertedAt = -2;
}
}
// console.log(this.board);
this.clipBoard();
return insertedAt;
} else {

View file

@ -78,22 +78,24 @@ function updateLeaderboards() {
type: "global",
})
.then((data) => {
console.log(data);
// console.log(data);
hideBackgroundLoader();
$("#leaderboardsWrapper table.global tbody").empty();
data.data.board.forEach((entry, index) => {
$("#leaderboardsWrapper table.global tbody").append(`
<tr>
<td>${index + 1}</td>
<td>${entry.name}</td>
<td>${entry.wpm}</td>
<td>${entry.raw}</td>
<td>${entry.acc}</td>
<td>${entry.mode} ${entry.mode2}</td>
<td>${moment(entry.timestamp).format("DD MMM YYYY<br>HH:mm")}</td>
</tr>
`);
});
if (data.data.board !== undefined) {
data.data.board.forEach((entry, index) => {
$("#leaderboardsWrapper table.global tbody").append(`
<tr>
<td>${index + 1}</td>
<td>${entry.name}</td>
<td>${entry.wpm}</td>
<td>${entry.raw}</td>
<td>${entry.acc}</td>
<td>${entry.mode} ${entry.mode2}</td>
<td>${moment(entry.timestamp).format("DD MMM YYYY<br>HH:mm")}</td>
</tr>
`);
});
}
});
}

View file

@ -1078,7 +1078,7 @@ function showResult(difficultyFailed = false) {
obj: completedEvent,
}).then((e) => {
accountIconLoading(false);
console.log(e.data);
// console.log(e.data);
if (e.data.resultCode === -1) {
showNotification("Could not save result", 3000);
} else if (e.data.resultCode === 1 || e.data.resultCode === 2) {
@ -1094,7 +1094,11 @@ function showResult(difficultyFailed = false) {
$("#result .stats .leaderboards .bottom").html("not found");
} else if (e.data.globalLeaderboard === -1) {
$("#result .stats .leaderboards .bottom").html(
"not qualified"
"global: not qualified"
);
} else if (e.data.globalLeaderboard === -2) {
$("#result .stats .leaderboards .bottom").html(
"global: already on the leaderboard with a better result"
);
} else if (e.data.globalLeaderboard >= 0) {
let pos = e.data.globalLeaderboard + 1;
@ -1107,7 +1111,7 @@ function showResult(difficultyFailed = false) {
numend = "rd";
}
$("#result .stats .leaderboards .bottom").html(
`global: ${e.data.globalLeaderboard}${numend} place`
`global: ${pos}${numend} place`
);
}
if (e.data.resultCode === 2) {