from rest_framework import generics, permissions from rest_framework.exceptions import PermissionDenied from core.apps.tasks.models.comment import Comment from core.apps.tasks.serializers.comment import CommentSerializer, CommentCreateSerializer class CommentListCreateAPIView(generics.ListCreateAPIView): queryset = Comment.objects.all() permission_classes = [permissions.IsAuthenticated] def get_serializer_class(self): if self.request.method == 'POST': return CommentCreateSerializer return CommentSerializer def get_queryset(self): task_id = self.request.query_params.get('task_id') queryset = self.queryset if task_id: queryset = queryset.filter(task_id=task_id) return queryset.order_by('-id') def get_serializer_context(self): return {"request": self.request} class CommentDetailAPIView(generics.RetrieveUpdateDestroyAPIView): queryset = Comment.objects.all() permission_classes = [permissions.IsAuthenticated] def get_serializer_class(self): if self.request.method in ['PUT', 'PATCH']: return CommentCreateSerializer return CommentSerializer def get_serializer_context(self): return {"request": self.request} def perform_update(self, serializer): comment = self.get_object() if comment.created_by != self.request.user: raise PermissionDenied("You cannot edit this comment") serializer.save() def perform_destroy(self, instance): if instance.created_by != self.request.user: raise PermissionDenied("You cannot delete this comment") instance.delete()