Added player winrate statistic
This commit is contained in:
parent
7bb210ba83
commit
96a8f21af1
4 changed files with 41 additions and 4 deletions
|
|
@ -2,7 +2,7 @@ from pydantic import BaseModel
|
|||
from typing import Union, Dict
|
||||
from datetime import date
|
||||
|
||||
from src.classes import boardgame_classes
|
||||
from src.classes import boardgame_classes, player_classes
|
||||
|
||||
class StatisticBase(BaseModel):
|
||||
name: str
|
||||
|
|
@ -10,6 +10,9 @@ class StatisticBase(BaseModel):
|
|||
class NumberStatistic(StatisticBase):
|
||||
result: float
|
||||
|
||||
class PlayerStatistic(StatisticBase):
|
||||
result: Dict[str, float]
|
||||
|
||||
class GamesStatistic(StatisticBase):
|
||||
result: list[boardgame_classes.BoardGamePublic]
|
||||
|
||||
|
|
|
|||
|
|
@ -160,7 +160,7 @@ def get_players(session: Session = Depends(get_session)):
|
|||
|
||||
@app.get('/player', response_model=player_classes.PlayerPublic)
|
||||
def get_player(player_name: str, session: Session = Depends(get_session)):
|
||||
requested_players = data_connection.get_player(player_name.title(), session)
|
||||
requested_players = data_connection.get_player(player_name, session)
|
||||
|
||||
return requested_players
|
||||
|
||||
|
|
@ -212,3 +212,9 @@ def get_shelf_of_shame(query: BoardgameFilterParams = Depends(), session: Sessio
|
|||
statistic_to_return = statistic_creator.get_shelf_of_shame(session, query)
|
||||
|
||||
return statistic_to_return
|
||||
|
||||
@app.get('/statistics/winrate', response_model=statistic_classes.PlayerStatistic)
|
||||
def get_winrate(player_name: str | None = None, session: Session = Depends(get_session)):
|
||||
statistic_to_return = statistic_creator.get_winrate(session, player_name)
|
||||
|
||||
return statistic_to_return
|
||||
|
|
@ -132,7 +132,7 @@ def get_all_players(session: Session) -> list[player_classes.Player]:
|
|||
return players_from_db
|
||||
|
||||
def get_player(player_name: str, session: Session) -> player_classes.Player:
|
||||
player_from_db = db_connection.get_player(player_name, session)
|
||||
player_from_db = db_connection.get_player(player_name.title(), session)
|
||||
return player_from_db
|
||||
|
||||
def get_designers(session: Session) -> list[people_classes.Designer]:
|
||||
|
|
|
|||
|
|
@ -152,3 +152,31 @@ def get_shelf_of_shame(session: Session, filtering_query: BoardgameFilterParams
|
|||
statistic_to_return = statistic_classes.GamesStatistic.model_validate(statistic_dict)
|
||||
|
||||
return statistic_to_return
|
||||
|
||||
|
||||
def get_winrate(session: Session, player_name: str | None = None):
|
||||
|
||||
if player_name == None:
|
||||
players_to_calculate = data_connection.get_all_players(session)
|
||||
else:
|
||||
players_to_calculate = [data_connection.get_player(player_name.title(), session)]
|
||||
|
||||
statistic_dict = {
|
||||
'name': 'Player winrate',
|
||||
'result': {}
|
||||
}
|
||||
|
||||
for player in players_to_calculate:
|
||||
total_games_played = len(player.playplayers)
|
||||
total_games_won = 0
|
||||
for playplayer in player.playplayers:
|
||||
if playplayer.has_won:
|
||||
total_games_won += 1
|
||||
|
||||
statistic_dict['result'][player.name] = total_games_won / total_games_played
|
||||
|
||||
statistic_to_return = statistic_classes.PlayerStatistic.model_validate(statistic_dict)
|
||||
|
||||
return statistic_to_return
|
||||
|
||||
|
||||
Loading…
Reference in a new issue