From 9666a998c4bce831911faee41128768d32338357 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Thu, 18 Sep 2025 15:48:50 +0200 Subject: [PATCH 1/3] Fix bracket rendering when both parents are disabled --- tournaments/static/tournaments/js/tournament_bracket.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tournaments/static/tournaments/js/tournament_bracket.js b/tournaments/static/tournaments/js/tournament_bracket.js index 96ab5b7..81be6fc 100644 --- a/tournaments/static/tournaments/js/tournament_bracket.js +++ b/tournaments/static/tournaments/js/tournament_bracket.js @@ -259,6 +259,10 @@ function renderBracket(options) { top = (parentPos1 + parentPos2) / 2; if (parent1Disable && parent2Disable) { nextMatchDistance = 0; + const keys = Object.keys(matchPositions[roundIndex]).map(Number); + const lastKey = Math.max(...keys); + top = + (matchHeight + matchSpacing) * minimumMatchDistance * keys.length; } else { nextMatchDistance = parentPos2 - parentPos1; } From ac76622995992c9dda6bb2a82725f21d42a555bb Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Thu, 18 Sep 2025 16:25:45 +0200 Subject: [PATCH 2/3] Add min_start_date filter to Tournament summary view --- api/serializers.py | 2 +- api/views.py | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/api/serializers.py b/api/serializers.py index 2611dfa..b98d239 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -143,7 +143,7 @@ class TournamentSummarySerializer(serializers.ModelSerializer): fields = ['id', 'name', 'start_date', 'day_duration', 'team_count', 'federal_category', 'federal_level_category', 'federal_age_category', 'registration_count'] def get_registration_count(self, obj): - return len(obj.teams(True)) + return len(obj.teams(False)) class EventSerializer(serializers.ModelSerializer): class Meta: diff --git a/api/views.py b/api/views.py index 4778afb..e354117 100644 --- a/api/views.py +++ b/api/views.py @@ -40,6 +40,7 @@ import pandas as pd import os import logging +from datetime import datetime logger = logging.getLogger(__name__) @@ -83,10 +84,23 @@ class TournamentSummaryViewSet(SoftDeleteViewSet): if self.request.user.is_anonymous: return Tournament.objects.none() - return self.queryset.filter( + queryset = self.queryset.filter( Q(event__creator=self.request.user) | Q(related_user=self.request.user) ).distinct() + # Add min_start_date filtering + min_start_date = self.request.query_params.get('min_start_date') + if min_start_date: + try: + # Parse the date string (assumes ISO format: YYYY-MM-DD) + min_date = datetime.fromisoformat(min_start_date).date() + print(min_date) + queryset = queryset.filter(start_date__gte=min_date) + except (ValueError, TypeError): + # If date parsing fails, ignore the filter + pass + + return queryset class TournamentViewSet(SoftDeleteViewSet): queryset = Tournament.objects.all() From 9717e719885c80f960d2bcf5f21b95cdd328516a Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Fri, 19 Sep 2025 10:34:15 +0200 Subject: [PATCH 3/3] Change IntegrityError to ValidationError in user serializer --- api/serializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/serializers.py b/api/serializers.py index b98d239..c055f36 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -49,7 +49,7 @@ class UserSerializer(serializers.ModelSerializer): username_lower = validated_data['username'].lower() if CustomUser.objects.filter(username__iexact=username_lower) | CustomUser.objects.filter(email__iexact=username_lower): - raise IntegrityError("Cet identifiant est déjà utilisé. Veuillez en choisir un autre :)") + raise serializers.ValidationError("Cet identifiant est déjà utilisé. Veuillez en choisir un autre :)") user = CustomUser.objects.create_user( username=validated_data['username'],