avoo/elo package is a lightweight, focused library for calculating Elo ratings between two players. It fits well in:
EloUpdated) for reactivity.users or players table).elo_score INT DEFAULT 1200) to store ratings.elo_score for leaderboard queries.EloUpdated events to decouple calculations from notifications/analytics./leaderboard endpoints.elo_score column to player table (e.g., ALTER TABLE players ADD COLUMN elo_score INT DEFAULT 1200).EloCalculator service class wrapping avoo/elo:
class EloCalculator {
public function updateScores(Player $winner, Player $loser, int $kFactor = 32): void {
$elo = new \Avoo\Elo($winner->elo_score, $loser->elo_score);
$winner->elo_score = $elo->calculateWinner();
$loser->elo_score = $elo->calculateLoser();
$winner->save();
$loser->save();
}
}
AppServiceProvider:
$this->app->singleton(EloCalculator::class, fn() => new EloCalculator());
event(new EloUpdated($winner, $loser, $newWinnerElo, $newLoserElo));
ALTER TABLE players ADD INDEX idx_elo_score ON elo_score;
composer require avoo/elo.EloCalculator service and bind it.avoo/elo for updates (though unlikely given low activity)./debug/elo?winnerId=1&loserId=2).elo_score is indexed for ORDER BY queries.How can I help you explore Laravel packages today?