diff --git a/src/apps/api/serializers/competitions.py b/src/apps/api/serializers/competitions.py index d29ca7ba7..81e233523 100644 --- a/src/apps/api/serializers/competitions.py +++ b/src/apps/api/serializers/competitions.py @@ -17,6 +17,7 @@ from api.serializers.queues import QueueSerializer from datetime import datetime +from django.utils.timezone import now class PhaseSerializer(WritableNestedModelSerializer): @@ -92,9 +93,10 @@ def validate_leaderboard(self, value): class PhaseDetailSerializer(serializers.ModelSerializer): tasks = PhaseTaskInstanceSerializer(source='task_instances', many=True) status = serializers.SerializerMethodField() - public_data = DataDetailSerializer(read_only=True) starting_kit = DataDetailSerializer(read_only=True) + used_submissions_per_day = serializers.SerializerMethodField() + used_submissions_per_person = serializers.SerializerMethodField() class Meta: model = Phase @@ -117,6 +119,9 @@ class Meta: 'public_data', 'starting_kit', 'is_final_phase', + 'used_submissions_per_day', + 'used_submissions_per_person' + ) def get_status(self, obj): @@ -155,6 +160,34 @@ def get_status(self, obj): elif not phase_started: return Phase.NEXT + def get_used_submissions_per_day(self, obj): + + # Check if 'request' key exists in the context + if 'request' in self.context: + # Get user from the request + user = self.context['request'].user + if user.is_authenticated: + # Get all submissions which are not failed and belongs to this user for this phase + qs = obj.submissions.filter(owner=user, parent__isnull=True).exclude(status='Failed') + # Count submissions made today + daily_submission_count = qs.filter(created_when__day=now().day).count() + return daily_submission_count + return 0 + + def get_used_submissions_per_person(self, obj): + + # Check if 'request' key exists in the context + if 'request' in self.context: + # Get user from the request + user = self.context['request'].user + if user.is_authenticated: + # Get all submissions which are not failed and belongs to this user for this phase + qs = obj.submissions.filter(owner=user, parent__isnull=True).exclude(status='Failed') + # Count all submissions + total_submission_count = qs.count() + return total_submission_count + return 0 + class PhaseUpdateSerializer(PhaseSerializer): tasks = PhaseTaskInstanceSerializer(source='task_instances', many=True) diff --git a/src/static/riot/competitions/detail/_tabs.tag b/src/static/riot/competitions/detail/_tabs.tag index 09647588c..71d7380f9 100644 --- a/src/static/riot/competitions/detail/_tabs.tag +++ b/src/static/riot/competitions/detail/_tabs.tag @@ -128,6 +128,7 @@