.then(([winnerStats, loserStats]) => { // If player isn't on the leaderboard yet, then ELO defaults to 1000. winnerStats = winnerStats || { wins: 0, losses: 0, elo: 1000, streak: 0 } loserStats = loserStats || { wins: 0, losses: 0, elo: 1000, streak: 0 } winner.beforeStats = winnerStats winner.other.beforeStats = loserStats const winnerElo = elo.ifWins(winnerStats.elo, loserStats.elo) const loserElo = elo.ifLoses(loserStats.elo, winnerStats.elo) const winnerStreak = winnerStats.streak <= 0 ? 1 : winnerStats.streak + 1 const loserStreak = loserStats.streak >= 0 ? -1 : loserStats.streak - 1 return db.batch([ db.saveMatch(match.id, winner, winner.other), db.updateLeaderboard(winner, winnerStats.wins + 1, winnerStats.losses, winnerElo, winnerStreak), db.updateLeaderboard(winner.other, loserStats.wins, loserStats.losses + 1, loserElo, loserStreak) ]) })
history.forEach(match => { const winnerId = match.winner_id const loserId = match.loser_id const winner = leaderboard[winnerId] = leaderboard[winnerId] || Object.assign({}, entry, { player_id: winnerId }) const loser = leaderboard[loserId] = leaderboard[loserId] || Object.assign({}, entry, { player_id: loserId }) const winnerElo = winner.elo const loserElo = loser.elo winner.elo = elo.ifWins(winnerElo, loserElo) loser.elo = elo.ifLoses(loserElo, winnerElo) winner.wins += 1 loser.losses += 1 winner.streak = winner.streak <= 0 ? 1 : winner.streak + 1 loser.streak = loser.streak >= 0 ? -1 : loser.streak - 1 })