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

Loading…
Cancel
Save