Make DELETE calls return 204 instead of 404 if the data does not exist

bracket-feature
Laurent 9 months ago
parent 465cd1dbf1
commit b868bc197f
  1. 44
      api/views.py

@ -12,6 +12,7 @@ from rest_framework.generics import UpdateAPIView
from rest_framework.exceptions import MethodNotAllowed from rest_framework.exceptions import MethodNotAllowed
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView from rest_framework.views import APIView
from django.http import Http404
from django.contrib.auth import authenticate from django.contrib.auth import authenticate
from django.db.models import Q from django.db.models import Q
@ -76,7 +77,14 @@ def user_by_token(request):
serializer = UserSerializer(request.user) serializer = UserSerializer(request.user)
return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.data, status=status.HTTP_200_OK)
class UserViewSet(viewsets.ModelViewSet): class SoftDeleteViewSet(viewsets.ModelViewSet):
def destroy(self, request, *args, **kwargs):
try:
return super().destroy(request, *args, **kwargs)
except Http404:
return Response(status=status.HTTP_204_NO_CONTENT)
class UserViewSet(SoftDeleteViewSet):
queryset = CustomUser.objects.all() queryset = CustomUser.objects.all()
serializer_class = UserUpdateSerializer serializer_class = UserUpdateSerializer
permission_classes = [] # Users are public whereas the other requests are only for logged users permission_classes = [] # Users are public whereas the other requests are only for logged users
@ -87,7 +95,7 @@ class UserViewSet(viewsets.ModelViewSet):
return UserSerializer return UserSerializer
return self.serializer_class return self.serializer_class
class ClubViewSet(viewsets.ModelViewSet): class ClubViewSet(SoftDeleteViewSet):
queryset = Club.objects.all() queryset = Club.objects.all()
serializer_class = ClubSerializer serializer_class = ClubSerializer
permission_classes = [IsClubOwner] # Clubs are public whereas the other requests are only for logged users permission_classes = [IsClubOwner] # Clubs are public whereas the other requests are only for logged users
@ -95,7 +103,7 @@ 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 TournamentViewSet(viewsets.ModelViewSet): class TournamentViewSet(SoftDeleteViewSet):
queryset = Tournament.objects.all() queryset = Tournament.objects.all()
serializer_class = TournamentSerializer serializer_class = TournamentSerializer
@ -104,7 +112,7 @@ class TournamentViewSet(viewsets.ModelViewSet):
return [] return []
return self.queryset.filter(event__creator=self.request.user) return self.queryset.filter(event__creator=self.request.user)
class PurchaseViewSet(viewsets.ModelViewSet): class PurchaseViewSet(SoftDeleteViewSet):
queryset = Purchase.objects.all() queryset = Purchase.objects.all()
serializer_class = PurchaseSerializer serializer_class = PurchaseSerializer
@ -130,10 +138,6 @@ class PurchaseViewSet(viewsets.ModelViewSet):
def delete(self, request, pk): def delete(self, request, pk):
raise MethodNotAllowed('DELETE') raise MethodNotAllowed('DELETE')
# class ExpandedTournamentViewSet(viewsets.ModelViewSet):
# queryset = Tournament.objects.all()
# serializer_class = ExpandedTournamentSerializer
class ChangePasswordView(UpdateAPIView): class ChangePasswordView(UpdateAPIView):
serializer_class = ChangePasswordSerializer serializer_class = ChangePasswordSerializer
@ -148,7 +152,7 @@ class ChangePasswordView(UpdateAPIView):
# return new token # return new token
return Response({'token': token.key}, status=status.HTTP_200_OK) return Response({'token': token.key}, status=status.HTTP_200_OK)
class EventViewSet(viewsets.ModelViewSet): class EventViewSet(SoftDeleteViewSet):
queryset = Event.objects.all() queryset = Event.objects.all()
serializer_class = EventSerializer serializer_class = EventSerializer
@ -157,7 +161,7 @@ class EventViewSet(viewsets.ModelViewSet):
return [] return []
return self.queryset.filter(creator=self.request.user) return self.queryset.filter(creator=self.request.user)
class RoundViewSet(viewsets.ModelViewSet): class RoundViewSet(SoftDeleteViewSet):
queryset = Round.objects.all() queryset = Round.objects.all()
serializer_class = RoundSerializer serializer_class = RoundSerializer
@ -169,7 +173,7 @@ class RoundViewSet(viewsets.ModelViewSet):
return self.queryset.filter(tournament__event__creator=self.request.user) return self.queryset.filter(tournament__event__creator=self.request.user)
return [] return []
class GroupStageViewSet(viewsets.ModelViewSet): class GroupStageViewSet(SoftDeleteViewSet):
queryset = GroupStage.objects.all() queryset = GroupStage.objects.all()
serializer_class = GroupStageSerializer serializer_class = GroupStageSerializer
@ -181,7 +185,7 @@ class GroupStageViewSet(viewsets.ModelViewSet):
return self.queryset.filter(tournament__event__creator=self.request.user) return self.queryset.filter(tournament__event__creator=self.request.user)
return [] return []
class MatchViewSet(viewsets.ModelViewSet): class MatchViewSet(SoftDeleteViewSet):
queryset = Match.objects.all() queryset = Match.objects.all()
serializer_class = MatchSerializer serializer_class = MatchSerializer
@ -193,7 +197,7 @@ class MatchViewSet(viewsets.ModelViewSet):
return self.queryset.filter(Q(group_stage__tournament__event__creator=self.request.user) | Q(round__tournament__event__creator=self.request.user)) return self.queryset.filter(Q(group_stage__tournament__event__creator=self.request.user) | Q(round__tournament__event__creator=self.request.user))
return [] return []
class TeamScoreViewSet(viewsets.ModelViewSet): class TeamScoreViewSet(SoftDeleteViewSet):
queryset = TeamScore.objects.all() queryset = TeamScore.objects.all()
serializer_class = TeamScoreSerializer serializer_class = TeamScoreSerializer
@ -206,7 +210,7 @@ class TeamScoreViewSet(viewsets.ModelViewSet):
return self.queryset.filter(team_registration__tournament__event__creator=self.request.user) return self.queryset.filter(team_registration__tournament__event__creator=self.request.user)
return [] return []
class TeamRegistrationViewSet(viewsets.ModelViewSet): class TeamRegistrationViewSet(SoftDeleteViewSet):
queryset = TeamRegistration.objects.all() queryset = TeamRegistration.objects.all()
serializer_class = TeamRegistrationSerializer serializer_class = TeamRegistrationSerializer
@ -218,7 +222,7 @@ class TeamRegistrationViewSet(viewsets.ModelViewSet):
return self.queryset.filter(tournament__event__creator=self.request.user) return self.queryset.filter(tournament__event__creator=self.request.user)
return [] return []
class PlayerRegistrationViewSet(viewsets.ModelViewSet): class PlayerRegistrationViewSet(SoftDeleteViewSet):
queryset = PlayerRegistration.objects.all() queryset = PlayerRegistration.objects.all()
serializer_class = PlayerRegistrationSerializer serializer_class = PlayerRegistrationSerializer
@ -230,11 +234,11 @@ class PlayerRegistrationViewSet(viewsets.ModelViewSet):
return self.queryset.filter(team_registration__tournament__event__creator=self.request.user) return self.queryset.filter(team_registration__tournament__event__creator=self.request.user)
return [] return []
class CourtViewSet(viewsets.ModelViewSet): class CourtViewSet(SoftDeleteViewSet):
queryset = Court.objects.all() queryset = Court.objects.all()
serializer_class = CourtSerializer serializer_class = CourtSerializer
class DateIntervalViewSet(viewsets.ModelViewSet): class DateIntervalViewSet(SoftDeleteViewSet):
queryset = DateInterval.objects.all() queryset = DateInterval.objects.all()
serializer_class = DateIntervalSerializer serializer_class = DateIntervalSerializer
@ -294,7 +298,7 @@ class DeviceTokenViewSet(viewsets.ModelViewSet):
def perform_create(self, serializer): def perform_create(self, serializer):
serializer.save(user=self.request.user) serializer.save(user=self.request.user)
class DrawLogViewSet(viewsets.ModelViewSet): class DrawLogViewSet(SoftDeleteViewSet):
queryset = DrawLog.objects.all() queryset = DrawLog.objects.all()
serializer_class = DrawLogSerializer serializer_class = DrawLogSerializer
@ -306,7 +310,7 @@ class DrawLogViewSet(viewsets.ModelViewSet):
return self.queryset.filter(tournament__event__creator=self.request.user) return self.queryset.filter(tournament__event__creator=self.request.user)
return [] return []
class UnregisteredTeamViewSet(viewsets.ModelViewSet): class UnregisteredTeamViewSet(SoftDeleteViewSet):
queryset = UnregisteredTeam.objects.all() queryset = UnregisteredTeam.objects.all()
serializer_class = UnregisteredTeamSerializer serializer_class = UnregisteredTeamSerializer
@ -318,7 +322,7 @@ class UnregisteredTeamViewSet(viewsets.ModelViewSet):
return self.queryset.filter(tournament__event__creator=self.request.user) return self.queryset.filter(tournament__event__creator=self.request.user)
return [] return []
class UnregisteredPlayerViewSet(viewsets.ModelViewSet): class UnregisteredPlayerViewSet(SoftDeleteViewSet):
queryset = UnregisteredPlayer.objects.all() queryset = UnregisteredPlayer.objects.all()
serializer_class = UnregisteredPlayerSerializer serializer_class = UnregisteredPlayerSerializer

Loading…
Cancel
Save