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):
|
class TimeLineStatistic(StatisticBase):
|
||||||
result: Dict[Union[date, int], int]
|
result: Dict[Union[date, int], Union[int, float]]
|
||||||
|
|
||||||
model_config = {
|
model_config = {
|
||||||
'validate_assignment':True
|
'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)
|
statistic_to_return = statistic_creator.get_winrate(session, player_name)
|
||||||
|
|
||||||
return statistic_to_return
|
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
|
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