from rest_framework import generics, status from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from .models import Event from .serializers import EventSerializer, EventCreateSerializer, EventUpdateSerializer class EventListView(generics.ListCreateAPIView): serializer_class = EventSerializer permission_classes = [IsAuthenticated] def get_queryset(self): user = self.request.user return Event.objects.filter(user=user).select_related('user', 'linked_user') def perform_create(self, serializer): serializer.save(user=self.request.user) def create(self, request, *args, **kwargs): serializer = EventCreateSerializer(data=request.data, context=self.get_serializer_context()) serializer.is_valid(raise_exception=True) event = serializer.save(user=request.user) return Response(EventSerializer(event).data, status=status.HTTP_201_CREATED) class EventDetailView(generics.RetrieveUpdateDestroyAPIView): serializer_class = EventSerializer permission_classes = [IsAuthenticated] lookup_url_kwarg = 'id' def get_queryset(self): user = self.request.user return Event.objects.filter(user=user).select_related('user', 'linked_user') def update(self, request, *args, **kwargs): partial = kwargs.pop('partial', False) instance = self.get_object() # Use the update serializer for updates serializer = EventUpdateSerializer( instance, data=request.data, partial=partial, context=self.get_serializer_context(), ) serializer.is_valid(raise_exception=True) self.perform_update(serializer) return Response(EventSerializer(serializer.instance).data) def destroy(self, request, *args, **kwargs): instance = self.get_object() self.perform_destroy(instance) return Response( {'message': 'Event deleted successfully'}, status=status.HTTP_200_OK ) class EventCreateView(EventListView): http_method_names = ['post', 'options'] serializer_class = EventCreateSerializer permission_classes = [IsAuthenticated] def perform_create(self, serializer): serializer.save(user=self.request.user)