Base
This commit is contained in:
42
stat/user_statistics/stat_management/signals.py
Normal file
42
stat/user_statistics/stat_management/signals.py
Normal file
@ -0,0 +1,42 @@
|
||||
from django.db.models.signals import post_save
|
||||
from django.dispatch import receiver
|
||||
from .models import GameHistory, Stats
|
||||
|
||||
@receiver(post_save, sender=GameHistory)
|
||||
def update_player_stats(sender, instance, created, **kwargs):
|
||||
if created:
|
||||
# get players
|
||||
player_1_stats, _ = Stats.objects.get_or_create(player_id=instance.player_1_id)
|
||||
player_2_stats, _ = Stats.objects.get_or_create(player_id=instance.player_2_id)
|
||||
|
||||
# update wins and losses
|
||||
if instance.winner_id == instance.player_1_id:
|
||||
player_1_stats.wins += 1
|
||||
player_2_stats.losses += 1
|
||||
else:
|
||||
player_1_stats.losses += 1
|
||||
player_2_stats.wins += 1
|
||||
|
||||
# update games played
|
||||
player_1_stats.total_games_played += 1
|
||||
player_2_stats.total_games_played += 1
|
||||
|
||||
# update win rate
|
||||
player_1_stats.win_rate = player_1_stats.wins / player_1_stats.total_games_played * 100
|
||||
player_2_stats.win_rate = player_2_stats.wins / player_2_stats.total_games_played * 100
|
||||
|
||||
# update hours played
|
||||
player_1_stats.total_hours_played += instance.duration / 3600
|
||||
player_2_stats.total_hours_played += instance.duration / 3600
|
||||
|
||||
# update goal scored
|
||||
player_1_stats.goal_scored += instance.player_1_score
|
||||
player_2_stats.goal_scored += instance.player_2_score
|
||||
|
||||
# update goal conceded
|
||||
player_1_stats.goal_conceded += instance.player_2_score
|
||||
player_2_stats.goal_conceded += instance.player_1_score
|
||||
|
||||
# save stats
|
||||
player_1_stats.save()
|
||||
player_2_stats.save()
|
||||
Reference in New Issue
Block a user