diff --git a/api/views.py b/api/views.py index d97d8b1..310c867 100644 --- a/api/views.py +++ b/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