fix live private section

sync3
Razmig Sarkissian 5 months ago
parent ace8801ecc
commit 1385094474
  1. 71
      tournaments/views.py

@ -1715,37 +1715,54 @@ def private_tournaments(request):
thirty_days_ago = now - timedelta(days=30) thirty_days_ago = now - timedelta(days=30)
thirty_days_future = now + timedelta(days=30) thirty_days_future = now + timedelta(days=30)
# Custom query for private tournaments # Define a custom private tournaments query function
queries = [ def private_tournaments_query(query, ascending, limit=None):
Q(is_private=True, is_deleted=False, event__club__isnull=False) queries = [query, Q(is_private=True, is_deleted=False, event__club__isnull=False)]
]
sortkey = 'start_date'
# Filter by date range for future tournaments if not ascending:
future_query = queries.copy() sortkey = '-start_date'
future_query.append(Q(start_date__gt=now, start_date__lte=thirty_days_future))
queryset = Tournament.objects.filter(*queries).prefetch_related(
# Filter for live tournaments 'group_stages',
live_query = queries.copy() 'rounds',
live_query.append(Q(start_date__lte=now, end_date__isnull=True) | Q(start_date__lte=now, end_date__gt=now)) 'team_registrations',
).order_by(sortkey)
# Apply limit directly in the database query
if limit is not None and isinstance(limit, int) and limit > 0:
queryset = queryset[:limit]
return queryset
# Get all tournaments matching our criteria (similar to index but for private tournaments)
tournaments = private_tournaments_query(
Q(end_date__isnull=True, start_date__gte=thirty_days_ago, start_date__lte=thirty_days_future),
True, 50
)
# Filter for ended tournaments # Filter tournaments that should be displayed
ended_query = queries.copy() display_tournament = [t for t in tournaments if t.display_tournament()]
ended_query.append(Q(end_date__lte=now, end_date__gte=thirty_days_ago))
# Get the tournaments from the database # Categorize tournaments by status
future_tournaments = Tournament.objects.filter(*future_query).prefetch_related( live = []
'group_stages', 'rounds', 'team_registrations').order_by('start_date') future = []
for t in display_tournament:
if t.supposedly_in_progress():
live.append(t)
elif t.starts_in_the_future():
future.append(t)
live_tournaments = Tournament.objects.filter(*live_query).prefetch_related( # Get ended tournaments
'group_stages', 'rounds', 'team_registrations').order_by('start_date') clean_ended_tournaments = private_tournaments_query(Q(end_date__isnull=False), False, 50)
clean_ended_tournaments = [t for t in clean_ended_tournaments if t.display_tournament()]
ended_tournaments = [t for t in display_tournament if t.should_be_over()]
ended_tournaments = Tournament.objects.filter(*ended_query).prefetch_related( # Combine both lists
'group_stages', 'rounds', 'team_registrations').order_by('-end_date') finished = clean_ended_tournaments + ended_tournaments
# Filter tournaments that should be displayed # Sort the combined list by start_date in descending order
future = [t for t in future_tournaments if t.display_tournament()] finished.sort(key=lambda t: t.sorting_finished_date(), reverse=True)
live = [t for t in live_tournaments if t.display_tournament()]
ended = [t for t in ended_tournaments if t.display_tournament()]
return render( return render(
request, request,
@ -1753,7 +1770,7 @@ def private_tournaments(request):
{ {
'future': future[:10], 'future': future[:10],
'live': live[:10], 'live': live[:10],
'ended': ended[:10], 'ended': finished[:10],
'is_private_section': True, # Flag to indicate we're in the private tournaments section 'is_private_section': True, # Flag to indicate we're in the private tournaments section
'section_title': 'Tournois privés', # Title for the private tournaments page 'section_title': 'Tournois privés', # Title for the private tournaments page
} }

Loading…
Cancel
Save