Feat: add rating
This commit is contained in:
@ -25,6 +25,7 @@
|
||||
<thead class="bg-gray-800 text-white">
|
||||
<tr>
|
||||
<th class="py-2 px-4">Player</th>
|
||||
<th class="py-2 px-4">Rating</th>
|
||||
<th class="py-2 px-4">Games Played</th>
|
||||
<th class="py-2 px-4">Games Won</th>
|
||||
<th class="py-2 px-4">Games Lost</th>
|
||||
@ -36,6 +37,7 @@
|
||||
{{range .}}
|
||||
<tr>
|
||||
<td class="py-2 px-4 border">{{.Username}}</td>
|
||||
<td class="py-2 px-4 border">{{.Rating}}</td>
|
||||
<td class="py-2 px-4 border">{{.GamesPlayed}}</td>
|
||||
<td class="py-2 px-4 border">{{.GamesWon}}</td>
|
||||
<td class="py-2 px-4 border">{{.GamesLost}}</td>
|
||||
|
3
migrations/002_add_stats_elo.down.sql
Normal file
3
migrations/002_add_stats_elo.down.sql
Normal file
@ -0,0 +1,3 @@
|
||||
DROP TRIGGER IF EXISTS update_player_rating;
|
||||
|
||||
ALTER TABLE DROP COLUMN rating;
|
20
migrations/002_add_stats_elo.up.sql
Normal file
20
migrations/002_add_stats_elo.up.sql
Normal file
@ -0,0 +1,20 @@
|
||||
ALTER TABLE player_stats
|
||||
ADD COLUMN rating REAL NOT NULL DEFAULT 1000.0;
|
||||
|
||||
CREATE TRIGGER update_player_rating
|
||||
BEFORE UPDATE OF games_played, games_won ON player_stats
|
||||
WHEN NEW.games_played = OLD.games_played + 1
|
||||
BEGIN
|
||||
UPDATE player_stats
|
||||
SET rating = OLD.rating +
|
||||
32.0 * (
|
||||
CASE
|
||||
WHEN NEW.games_won = OLD.games_won + 1
|
||||
THEN 1.0 - 0.5 -- Win term: 0.5
|
||||
ELSE 0.0 - 0.5 -- Loss term: -0.5
|
||||
END
|
||||
) +
|
||||
0.05 * (1000.0 - OLD.rating)
|
||||
WHERE id = OLD.id;
|
||||
END;
|
||||
|
@ -152,6 +152,7 @@ type PlayerStats struct {
|
||||
GuesserWinrate float64 `db:"guesser_winrate"`
|
||||
PlayedAsMime int `db:"played_as_mime"`
|
||||
PlayedAsGuesser int `db:"played_as_guesser"`
|
||||
Rating float32 `db:"rating"`
|
||||
}
|
||||
|
||||
type Room struct {
|
||||
|
@ -38,6 +38,7 @@ func (p *RepoProvider) UpdatePlayerStats(ctx context.Context, stats *models.Play
|
||||
guesser_winrate = :guesser_winrate,
|
||||
played_as_mime = :played_as_mime,
|
||||
played_as_guesser = :played_as_guesser
|
||||
rating = :rating
|
||||
WHERE username = :username`, stats)
|
||||
return err
|
||||
}
|
||||
|
Reference in New Issue
Block a user