in backend/Functions/IoT/game_end/app.js [99:138]
async function persistLeaderboard(gameInfo) {
const promise = new Promise((resolve) => {
const key = `${gameInfo.gameId}:${gameInfo.playerName}:scoreboard`;
const owner = gameInfo.playerName;
const TableName = scoreboardTable;
let highScore = 0;
redisClient.zrevrange(key, 0, -1, 'withscores', (err, value) => {
if (!err) {
const map = value.reduce((map, k, i, res) => {
if (i % 2 !== 0) {
map[res[i - 1]] = Number(k);
}
return map;
}, {});
Object.keys(map).forEach((key) => {
let wins = 0;
if (highScore === 0) {
highScore = map[key];
}
if (map[key] === highScore) {
wins = 1;
}
const Item = {
gameId: gameInfo.gameId,
playerName: key,
quizName: gameInfo.quizName,
score: map[key],
};
saveItem(TableName, Item);
const progressmsg = JSON.stringify({
playerid: key, experience: map[key], wins, owner,
});
sendPlayerProgressMessage(progressmsg);
});
}
});
resolve(true);
});
return promise;
}