diff --git a/website/models.py b/website/models.py index 5b944636c..2edc32884 100644 --- a/website/models.py +++ b/website/models.py @@ -713,7 +713,7 @@ def update_streak_and_award_points(self, check_in_date=None): return False return True - + def award_streak_badges(self): """ Award badges for streak milestones @@ -740,6 +740,30 @@ def award_streak_badges(self): def __str__(self): return self.user.username + def check_merged_pr_badges(self): + thresholds = [ + (1, ("1 Merged Pull Request", "1-pr.png")), + (10, ("10 Merged Pull Requests", "10-pr.png")), + (25, ("25 Merged Pull Requests", "25-pr.png")), + (50, ("50 Merged Pull Requests", "50-pr.png")), + (100, ("100 Merged Pull Requests", "100-pr.png")), + ] + for limit, (badge_name, icon_file) in thresholds: + if self.merged_pr_count >= limit: + badge, created = Badge.objects.get_or_create( + title=badge_name, + type="automatic", + defaults={ + "description": f"Awarded for merging {limit} pull requests.", + "icon": f"badges/{icon_file}", + }, + ) + if not UserBadge.objects.filter(user=self.user, badge=badge).exists(): + UserBadge.objects.create(user=self.user, badge=badge) + print(f"Awarded badge '{badge_name}' to {self.user.username}") + + + def create_profile(sender, **kwargs): user = kwargs["instance"]