async function persistLeaderboard()

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;
}