Added winrate over time statistic
This commit is contained in:
parent
96a8f21af1
commit
0b412b8951
3 changed files with 47 additions and 3 deletions
|
|
@ -21,7 +21,7 @@ class GamesStatistic(StatisticBase):
|
|||
}
|
||||
|
||||
class TimeLineStatistic(StatisticBase):
|
||||
result: Dict[Union[date, int], int]
|
||||
result: Dict[Union[date, int], Union[int, float]]
|
||||
|
||||
model_config = {
|
||||
'validate_assignment':True
|
||||
|
|
|
|||
|
|
@ -218,3 +218,10 @@ def get_winrate(player_name: str | None = None, session: Session = Depends(get_s
|
|||
statistic_to_return = statistic_creator.get_winrate(session, player_name)
|
||||
|
||||
return statistic_to_return
|
||||
|
||||
@app.get('/statistics/winrate_over_time', response_model=statistic_classes.TimeLineStatistic)
|
||||
def get_winrate_over_time(player_name: str, day_step: int = 1, session: Session=Depends(get_session)):
|
||||
statistic_to_return = statistic_creator.get_winrate_over_time(session, player_name, day_step)
|
||||
|
||||
return statistic_to_return
|
||||
|
||||
|
|
|
|||
|
|
@ -180,3 +180,40 @@ def get_winrate(session: Session, player_name: str | None = None):
|
|||
return statistic_to_return
|
||||
|
||||
|
||||
def get_winrate_over_time(session: Session, player_name: str, day_step = 1):
|
||||
|
||||
def daterange(start_date: date, end_date: date, day_step):
|
||||
days = int((end_date - start_date).days)
|
||||
for n in range(0, days, day_step):
|
||||
yield start_date + timedelta(n)
|
||||
|
||||
|
||||
wanted_player = data_connection.get_player(player_name, session)
|
||||
all_playplayers = [playplayer for playplayer in wanted_player.playplayers]
|
||||
all_playplayers.sort(key=lambda x: x.play.play_date)
|
||||
|
||||
start_date = all_playplayers[0].play.play_date
|
||||
|
||||
timeline_dict = {}
|
||||
|
||||
for current_date in daterange(start_date, date.today(), day_step):
|
||||
playplayers_at_date = list(filter(lambda playplayer: playplayer.play.play_date <= current_date, all_playplayers))
|
||||
total_games_played = len(playplayers_at_date)
|
||||
total_games_won = 0
|
||||
for playplayer in playplayers_at_date:
|
||||
if playplayer.has_won:
|
||||
total_games_won += 1
|
||||
|
||||
timeline_dict[current_date] = total_games_won / total_games_played
|
||||
|
||||
|
||||
statistic_dict = {
|
||||
'name': 'Player winrate over time',
|
||||
'result': timeline_dict
|
||||
}
|
||||
|
||||
statistic_to_return = statistic_classes.TimeLineStatistic.model_validate(statistic_dict)
|
||||
|
||||
return statistic_to_return
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue