You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
padelclub_backend/tournaments/views.py

218 lines
7.8 KiB

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from tournaments.models import group_stage
from .serializers import ClubSerializer, TournamentSerializer, UserSerializer, ChangePasswordSerializer, EventSerializer, RoundSerializer, GroupStageSerializer, MatchSerializer, TeamScoreSerializer, TeamRegistrationSerializer, PlayerRegistrationSerializer, LiveMatchSerializer
from .models import Club, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamScore, TeamRegistration, PlayerRegistration
from .models import TeamSummon
from datetime import datetime
import datetime
from rest_framework import viewsets, permissions
from rest_framework.authtoken.models import Token
from rest_framework.response import Response
from rest_framework.decorators import api_view
from rest_framework import status
from rest_framework.generics import UpdateAPIView
from django.template import loader
from datetime import date
from django.http import JsonResponse
from django.db.models import Q
import json
def index(request):
today = date.today()
club_id = request.GET.get('club')
q_is_private = Q(is_private=False)
q_future = [q_is_private, Q(end_date__isnull=True, start_date__gt=today)]
q_live = [q_is_private, Q(end_date__isnull=True, start_date__lte=today)]
q_ended = [q_is_private, Q(end_date__isnull=False)]
club = None
if club_id:
club = get_object_or_404(Club, pk=club_id)
q_club = Q(event__club=club)
q_future.append(q_club)
q_live.append(q_club)
q_ended.append(q_club)
future_tournaments = Tournament.objects.filter(*q_future).order_by('start_date')
live_tournaments = Tournament.objects.filter(*q_live).order_by('start_date')
ended_tournaments = Tournament.objects.filter(*q_ended).order_by('start_date')
return render(
request,
"tournaments/tournaments.html",
{
'future': future_tournaments,
'live': live_tournaments,
'ended': ended_tournaments,
'club': club,
}
)
def clubs(request):
clubs = Club.objects.all().order_by('name')
return render(request, 'tournaments/clubs.html', {
'clubs': clubs,
})
def club(request, club_id):
club = get_object_or_404(Club, pk=club_id)
return render(request, 'tournaments/summons.html', {
'tournament': tournament,
'team_summons': team_summons,
})
def tournament(request, tournament_id):
tournament = get_object_or_404(Tournament, pk=tournament_id)
round_id = request.GET.get('round')
group_stage_id = request.GET.get('group_stage')
match_groups = tournament.match_groups(False, group_stage_id, round_id)
rounds = tournament.round_set.filter(loser=None).order_by('-index')
group_stages = tournament.groupstage_set.order_by('index')
return render(request, 'tournaments/matches.html', {
'tournament': tournament,
'rounds': rounds,
'group_stages': group_stages,
'match_groups': match_groups,
})
def tournament_summons(request, tournament_id):
tournament = get_object_or_404(Tournament, pk=tournament_id)
team_summons = tournament.team_summons()
return render(request, 'tournaments/summons.html', {
'tournament': tournament,
'team_summons': team_summons,
})
def tournament_broadcasted_summons(request, tournament_id):
tournament = get_object_or_404(Tournament, pk=tournament_id)
return render(request, 'tournaments/broadcasted_summons.html', {
'tournament': tournament,
})
def tournament_summons_json(request, tournament_id):
tournament = get_object_or_404(Tournament, pk=tournament_id)
team_summons = [summon.to_dict() for summon in tournament.team_summons()]
data = json.dumps(team_summons)
return HttpResponse(data, content_type='application/json')
def tournament_broadcast(request, tournament_id):
tournament = get_object_or_404(Tournament, pk=tournament_id)
return render(request, 'tournaments/broadcast.html', {
'tournament': tournament,
})
def tournament_matches(request, tournament_id):
tournament = get_object_or_404(Tournament, pk=tournament_id)
return render(request, 'tournaments/broadcasted_matches.html', {
'tournament': tournament,
})
def tournament_matches_json(request, tournament_id):
tournament = get_object_or_404(Tournament, pk=tournament_id)
live_matches = tournament.live_matches(broadcasted=True)
data = json.dumps(live_matches, default=vars)
return HttpResponse(data, content_type='application/json')
def tournament_group_stages(request, tournament_id):
tournament = get_object_or_404(Tournament, pk=tournament_id)
live_group_stages = list(tournament.live_group_stages())
return render(request, 'tournaments/group_stages.html', {
'tournament': tournament,
'group_stages': live_group_stages,
})
def tournament_broadcasted_group_stages(request, tournament_id):
tournament = get_object_or_404(Tournament, pk=tournament_id)
return render(request, 'tournaments/broadcasted_group_stages.html', {
'tournament': tournament,
})
def tournament_live_group_stage_json(request, tournament_id):
tournament = get_object_or_404(Tournament, pk=tournament_id)
gs_dicts = [gs.to_dict() for gs in tournament.live_group_stages()]
# group_stages = tournament.live_group_stages()
data = json.dumps(gs_dicts)
return HttpResponse(data, content_type='application/json')
def players(request):
return render(request, 'tournaments/test.html')
@api_view(['GET'])
def user_by_token(request):
# return Response({"message": "Hello for today! See you tomorrow!"})
# key = request.data['token']
# token = Token.objects.get(key=key)
# user = CustomUser.objects.get(username=token.user)
serializer = UserSerializer(request.user)
return Response(serializer.data, status=status.HTTP_200_OK)
class UserViewSet(viewsets.ModelViewSet):
queryset = CustomUser.objects.all()
serializer_class = UserSerializer
class ClubViewSet(viewsets.ModelViewSet):
queryset = Club.objects.all()
serializer_class = ClubSerializer
class TournamentViewSet(viewsets.ModelViewSet):
queryset = Tournament.objects.all()
serializer_class = TournamentSerializer
# class ExpandedTournamentViewSet(viewsets.ModelViewSet):
# queryset = Tournament.objects.all()
# serializer_class = ExpandedTournamentSerializer
class ChangePasswordView(UpdateAPIView):
serializer_class = ChangePasswordSerializer
def update(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.save()
# if using drf authtoken, create a new token
if hasattr(user, 'auth_token'):
user.auth_token.delete()
token, created = Token.objects.get_or_create(user=user)
# return new token
return Response({'token': token.key}, status=status.HTTP_200_OK)
class EventViewSet(viewsets.ModelViewSet):
queryset = Event.objects.all()
serializer_class = EventSerializer
class RoundViewSet(viewsets.ModelViewSet):
queryset = Round.objects.all()
serializer_class = RoundSerializer
class GroupStageViewSet(viewsets.ModelViewSet):
queryset = GroupStage.objects.all()
serializer_class = GroupStageSerializer
class MatchViewSet(viewsets.ModelViewSet):
queryset = Match.objects.all()
serializer_class = MatchSerializer
class TeamScoreViewSet(viewsets.ModelViewSet):
queryset = TeamScore.objects.all()
serializer_class = TeamScoreSerializer
class TeamRegistrationViewSet(viewsets.ModelViewSet):
queryset = TeamRegistration.objects.all()
serializer_class = TeamRegistrationSerializer
class PlayerRegistrationViewSet(viewsets.ModelViewSet):
queryset = PlayerRegistration.objects.all()
serializer_class = PlayerRegistrationSerializer