diff --git a/api/v1/views.py b/api/v1/views.py index fb79a335..5505310a 100644 --- a/api/v1/views.py +++ b/api/v1/views.py @@ -64,6 +64,7 @@ from apps.payment.models import ( ) from apps.school.models import SchoolSchedule, LiveLesson from apps.user.models import AuthorRequest +from project.pusher import pusher User = get_user_model() @@ -395,15 +396,15 @@ class ConfigViewSet(generics.RetrieveUpdateAPIView): class CommentViewSet(ExtendedModelViewSet): - queryset = Comment.objects.filter(level=0) - serializer_class = CommentCreateSerializer - permission_classes = (IsAdmin,) + queryset = Comment.objects.all() + serializer_class = CommentSerializer + permission_classes = (IsAuthorObjectOrAdmin,) def get_queryset(self): queryset = self.queryset is_deactivated = self.request.query_params.get('is_deactivated', '0') if is_deactivated == '0': - queryset = queryset + queryset = queryset.filter(level=0) elif is_deactivated == '1': queryset = queryset.filter(deactivated_at__isnull=True) elif is_deactivated == '2': @@ -412,11 +413,12 @@ class CommentViewSet(ExtendedModelViewSet): return queryset -class ObjectCommentsViewSet(viewsets.ReadOnlyModelViewSet): - queryset = Comment.objects.filter(level=0) +class ObjectCommentsViewSet(ExtendedModelViewSet): OBJ_TYPE_COURSE = 'course' OBJ_TYPE_LESSON = 'lesson' - permission_classes = (IsAdmin,) + queryset = Comment.objects.all() + serializer_class = CommentCreateSerializer + permission_classes = (IsAuthorObjectOrAdmin,) def get_queryset(self): queryset = self.queryset @@ -424,11 +426,11 @@ class ObjectCommentsViewSet(viewsets.ReadOnlyModelViewSet): obj_id = self.request.query_params.get('obj_id') is_deactivated = self.request.query_params.get('is_deactivated', '0') if obj_type == self.OBJ_TYPE_COURSE: - queryset = CourseComment.objects.filter(course=obj_id) + queryset = CourseComment.objects.filter(course=obj_id, parent__isnull=True) elif obj_type == self.OBJ_TYPE_LESSON: - queryset = LessonComment.objects.filter(lesson=obj_id) + queryset = LessonComment.objects.filter(lesson=obj_id, parent__isnull=True) if is_deactivated == '0': - queryset = queryset + queryset = queryset.filter(level=0) elif is_deactivated == '1': queryset = queryset.filter(deactivated_at__isnull=True) elif is_deactivated == '2': @@ -436,6 +438,8 @@ class ObjectCommentsViewSet(viewsets.ReadOnlyModelViewSet): return queryset def get_serializer_class(self): + if self.request.method == 'POST': + return CommentCreateSerializer obj_type = self.request.query_params.get('obj_type') if obj_type == self.OBJ_TYPE_COURSE: serializer_class = CourseCommentSerializer @@ -443,6 +447,22 @@ class ObjectCommentsViewSet(viewsets.ReadOnlyModelViewSet): serializer_class = LessonCommentSerializer return serializer_class + def perform_create(self, serializer): + obj_type = self.request.data.get('obj_type') + obj_id = self.request.data.get('obj_id') + serializer.save() + pusher().trigger(f'comments_{obj_type}_{obj_id}', 'add', serializer.data) + + def perform_destroy(self, instance): + obj_type = None + if isinstance(instance, LessonComment): + obj_type = self.OBJ_TYPE_LESSON + elif isinstance(instance, CourseComment): + obj_type = self.OBJ_TYPE_COURSE + serializer = self.get_serializer(instance) + pusher().trigger(f'comments_{obj_type}_{obj_id}', 'delete', serializer.data) + instance.delete() + class AuthorRequestViewSet(ExtendedModelViewSet): queryset = AuthorRequest.objects.all() diff --git a/apps/course/templates/course/lesson.html b/apps/course/templates/course/lesson.html index 18e51e78..9e79279d 100644 --- a/apps/course/templates/course/lesson.html +++ b/apps/course/templates/course/lesson.html @@ -96,7 +96,7 @@