52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
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()
|