profile: add winrate

This commit is contained in:
starnakin 2024-05-13 16:35:41 +02:00
parent 570b19134f
commit c38ca69dd2
2 changed files with 26 additions and 5 deletions

View File

@ -75,14 +75,32 @@ export default class extends AbstractView {
statusIndicator.classList.add('bg-danger'); statusIndicator.classList.add('bg-danger');
} }
/**
* @param {[Object]} games
*/
async fillStatistics(games) async fillStatistics(games)
{ {
const winrateDiv = document.getElementById("winrate");
const win = 0;
const lose = 0;
games.forEach(game => {
if (game.finished === false)
return
if (client.me.id === game.winner.id)
win++;
else
lose++;
});
winrateDiv.innerText = `winrate: ${win + lose === 0 ? "🤓" : win / (win + lose)}`
} }
async fillHistory(games) async fillHistory(games)
{ {
let game_list = document.getElementById("game-list"); const game_list = document.getElementById("game-list");
games.forEach(game => { games.forEach(game => {
@ -96,7 +114,7 @@ export default class extends AbstractView {
if (game.started) if (game.started)
game_item.style.backgroundColor = "yellow"; game_item.style.backgroundColor = "yellow";
if (game.finished) if (game.finished)
game_item.style.backgroundColor = this.profile.id === game.winner_id ? "green" : "red"; game_item.style.backgroundColor = this.profile.id === game.winner.id ? "green" : "red";
game.players.forEach(player => { game.players.forEach(player => {
let player_score = document.createElement("a"); let player_score = document.createElement("a");
@ -133,9 +151,12 @@ export default class extends AbstractView {
<button class='btn btn-sm btn-danger d-none' id='blockButton'>Block</button> <button class='btn btn-sm btn-danger d-none' id='blockButton'>Block</button>
<button class='btn btn-sm btn-secondary d-none' id='unblockButton'>Unblock</button> <button class='btn btn-sm btn-secondary d-none' id='unblockButton'>Unblock</button>
</div> </div>
<h1>Games</h1>
<div>
<h1 id='winrate'></h1>
</div>
<div> <div>
<link rel="stylesheet" href="/static/css/gameHistory.css"> <link rel="stylesheet" href="/static/css/gameHistory.css">
<h1>Game History</h1>
<div id="game-list"></div> <div id="game-list"></div>
</div> </div>
</div> </div>

View File

@ -9,7 +9,7 @@ from profiles.serializers import ProfileSerializer
class GameSerializer(serializers.ModelSerializer): class GameSerializer(serializers.ModelSerializer):
players = serializers.SerializerMethodField() players = serializers.SerializerMethodField()
winner_id = serializers.ReadOnlyField() winner = serializers.ReadOnlyField()
state = serializers.SerializerMethodField() state = serializers.SerializerMethodField()
started = serializers.ReadOnlyField() started = serializers.ReadOnlyField()
finished = serializers.ReadOnlyField() finished = serializers.ReadOnlyField()
@ -19,7 +19,7 @@ class GameSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = GameModel model = GameModel
fields = ["id", "winner_id", "state", "started", "finished", "players", "start_timestamp", "stop_timestamp", "game_type"] fields = ["id", "winner", "state", "started", "finished", "players", "start_timestamp", "stop_timestamp", "game_type"]
def get_state(self, instance: GameModel): def get_state(self, instance: GameModel):
if (instance.finished): if (instance.finished):