mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-10-17 11:06:17 +08:00
made sure only one result per person can be on the leaderboard,
started daily leaderboards
This commit is contained in:
parent
6ef04c1f34
commit
04f4eee886
3 changed files with 111 additions and 40 deletions
|
@ -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 {
|
||||
|
|
|
@ -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>
|
||||
`);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Add table
Reference in a new issue