Compare commits

...

2 Commits
main ... clubs

  1. 3
      api/urls.py
  2. 81
      api/views.py
  3. 25
      tournaments/migrations/0080_club_manager_club_umpires.py
  4. 13
      tournaments/models/club.py

@ -35,4 +35,7 @@ urlpatterns = [
# forgotten password # forgotten password
path('dj-rest-auth/', include('dj_rest_auth.urls')), path('dj-rest-auth/', include('dj_rest_auth.urls')),
# business
path('can-pay-tournament/', views.UserCanPayView.as_view()),
] ]

@ -18,6 +18,8 @@ from django.core.exceptions import ObjectDoesNotExist
from .permissions import IsClubOwner from .permissions import IsClubOwner
from .utils import is_valid_email from .utils import is_valid_email
import tournaments.models
class CustomAuthToken(APIView): class CustomAuthToken(APIView):
permission_classes = [] permission_classes = []
@ -65,6 +67,25 @@ class Logout(APIView):
return Response(status=status.HTTP_200_OK) return Response(status=status.HTTP_200_OK)
class UserCanPayView(APIView):
permission_classes = (IsAuthenticated,)
def post(self, request, *args, **kwargs):
user = self.request.user
if user.is_anonymous:
return Response({'error': 'Vous n\'êtes pas authentifié'}, status=status.HTTP_401_UNAUTHORIZED)
club_id = request.data.get('club')
if club_id is None:
return Response({'error': 'Aucun club n\'est renseigné'}, status=status.HTTP_401_UNAUTHORIZED)
for club in user.authorized_clubs.all():
if club.id == club_id:
return Response({'payment': TournamentPayment.UNLIMITED}, status=status.HTTP_200_OK)
return Response(status=status.HTTP_401_UNAUTHORIZED) # request is fine but no payment returned
@api_view(['GET']) @api_view(['GET'])
def user_by_token(request): def user_by_token(request):
serializer = UserSerializer(request.user) serializer = UserSerializer(request.user)
@ -81,6 +102,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 +124,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 +174,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