Adds ways for club to have umpires, and umpires can retrieve tournaments from that club

clubs
Laurent 1 year ago
parent 2fdac23aa5
commit eb7ea048c5
  1. 60
      api/views.py
  2. 25
      tournaments/migrations/0080_club_manager_club_umpires.py
  3. 13
      tournaments/models/club.py

@ -81,6 +81,20 @@ class UserViewSet(viewsets.ModelViewSet):
return UserSerializer return UserSerializer
return self.serializer_class return self.serializer_class
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 ClubViewSet(viewsets.ModelViewSet): class ClubViewSet(viewsets.ModelViewSet):
queryset = Club.objects.all() queryset = Club.objects.all()
serializer_class = ClubSerializer serializer_class = ClubSerializer
@ -89,14 +103,33 @@ class ClubViewSet(viewsets.ModelViewSet):
def perform_create(self, serializer): def perform_create(self, serializer):
serializer.save(creator=self.request.user) serializer.save(creator=self.request.user)
class EventViewSet(viewsets.ModelViewSet):
queryset = Event.objects.all()
serializer_class = EventSerializer
def get_queryset(self):
user = self.request.user
if user.is_anonymous:
return []
events = set(self.queryset.filter(creator=user))
for club in user.authorized_clubs.all():
for event in club.event_set.all():
events.add(event)
return events
class TournamentViewSet(viewsets.ModelViewSet): class TournamentViewSet(viewsets.ModelViewSet):
queryset = Tournament.objects.all() queryset = Tournament.objects.all()
serializer_class = TournamentSerializer serializer_class = TournamentSerializer
def get_queryset(self): def get_queryset(self):
if self.request.user.is_anonymous: user = self.request.user
if user.is_anonymous:
return [] return []
return self.queryset.filter(event__creator=self.request.user) tournaments = set(self.queryset.filter(event__creator=user))
for club in user.authorized_clubs.all():
for tournament in club.tournaments_set():
tournaments.add(tournament)
return tournaments
class PurchaseViewSet(viewsets.ModelViewSet): class PurchaseViewSet(viewsets.ModelViewSet):
queryset = Purchase.objects.all() queryset = Purchase.objects.all()
@ -120,29 +153,6 @@ class PurchaseViewSet(viewsets.ModelViewSet):
# queryset = Tournament.objects.all() # queryset = Tournament.objects.all()
# serializer_class = ExpandedTournamentSerializer # 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
def get_queryset(self):
if self.request.user.is_anonymous:
return []
return self.queryset.filter(creator=self.request.user)
class RoundViewSet(viewsets.ModelViewSet): class RoundViewSet(viewsets.ModelViewSet):
queryset = Round.objects.all() queryset = Round.objects.all()
serializer_class = RoundSerializer serializer_class = RoundSerializer

@ -0,0 +1,25 @@
# Generated by Django 4.2.11 on 2024-08-23 13:32
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('tournaments', '0079_alter_event_creator'),
]
operations = [
migrations.AddField(
model_name='club',
name='manager',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='managers', to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='club',
name='umpires',
field=models.ManyToManyField(blank=True, related_name='authorized_clubs', to=settings.AUTH_USER_MODEL),
),
]

@ -4,6 +4,9 @@ import uuid
class Club(models.Model): class Club(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True) id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True)
creator = models.ForeignKey('CustomUser', blank=True, null=True, on_delete=models.SET_NULL) # string to avoid circular import creator = models.ForeignKey('CustomUser', blank=True, null=True, on_delete=models.SET_NULL) # string to avoid circular import
manager = models.ForeignKey('CustomUser', blank=True, null=True, on_delete=models.SET_NULL, related_name="managers")
umpires = models.ManyToManyField('CustomUser', blank=True, related_name="authorized_clubs")
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
acronym = models.CharField(max_length=10) acronym = models.CharField(max_length=10)
phone = models.CharField(max_length=15, null=True, blank=True) phone = models.CharField(max_length=15, null=True, blank=True)
@ -22,6 +25,16 @@ class Club(models.Model):
def __str__(self): def __str__(self):
return self.name return self.name
# def events_set(self):
# return set(self.event_set.all())
def tournaments_set(self):
tournaments = set()
for event in self.event_set.all():
for tournament in event.tournament_set.all():
tournaments.add(tournament)
return tournaments
def events_count(self): def events_count(self):
return len(self.event_set.all()) return len(self.event_set.all())

Loading…
Cancel
Save