From b8e393f82f1e7826b25f7557b500f9e7ca13c732 Mon Sep 17 00:00:00 2001 From: Ivlev Denis Date: Mon, 12 Mar 2018 12:39:05 +0300 Subject: [PATCH] LIL-284. Add api for moderation of comments --- api/v1/serializers/course.py | 46 ++++++++++++++++++++++++++++++++++-- api/v1/urls.py | 4 +++- api/v1/views.py | 14 ++++++++++- 3 files changed, 60 insertions(+), 4 deletions(-) diff --git a/api/v1/serializers/course.py b/api/v1/serializers/course.py index 8139d8fa..52e16a25 100644 --- a/api/v1/serializers/course.py +++ b/api/v1/serializers/course.py @@ -1,7 +1,11 @@ from rest_framework import serializers -from apps.course.models import Category, Course, Material, Lesson, Like - +from apps.course.models import ( + Category, Course, + Comment, CourseComment, LessonComment, + Material, Lesson, + Like, +) from .content import ( ImageObjectSerializer, ContentSerializer, ContentCreateSerializer, GallerySerializer, GalleryImageSerializer, @@ -368,3 +372,41 @@ class CourseSerializer(serializers.ModelSerializer): 'update_at', 'deactivated_at', ) + + +class CommentSerializer(serializers.ModelSerializer): + + class Meta: + model = Comment + fields = ( + 'id', + 'content', + 'author', + 'parent', + 'created_at', + 'update_at', + ) + + def to_representation(self, instance): + if isinstance(instance, CourseComment): + return CourseCommentSerializer(instance, context=self.context).to_representation(instance) + elif isinstance(instance, LessonComment): + return LessonCommentSerializer(instance, context=self.context).to_representation(instance) + + +class CourseCommentSerializer(serializers.ModelSerializer): + + class Meta: + model = CourseComment + fields = CommentSerializer.Meta.fields + ( + 'course', + ) + + +class LessonCommentSerializer(serializers.ModelSerializer): + + class Meta: + model = LessonComment + fields = CommentSerializer.Meta.fields + ( + 'lesson', + ) diff --git a/api/v1/urls.py b/api/v1/urls.py index ab852c4d..3f487bd9 100644 --- a/api/v1/urls.py +++ b/api/v1/urls.py @@ -10,6 +10,7 @@ from .auth import ObtainToken from .views import ( AuthorBalanceViewSet, ConfigViewSet, CategoryViewSet, CourseViewSet, + CommentViewSet, MaterialViewSet, LikeViewSet, ImageViewSet, TextViewSet, ImageTextViewSet, VideoViewSet, @@ -20,8 +21,9 @@ from .views import ( router = DefaultRouter() router.register(r'author-balance', AuthorBalanceViewSet, base_name='author-balance') -router.register(r'courses', CourseViewSet, base_name='courses') router.register(r'categories', CategoryViewSet, base_name='categories') +router.register(r'courses', CourseViewSet, base_name='courses') +router.register(r'comments', CommentViewSet, base_name='comments') router.register(r'materials', MaterialViewSet, base_name='materials') router.register(r'lessons', LessonViewSet, base_name='lessons') router.register(r'likes', LikeViewSet, base_name='likes') diff --git a/api/v1/views.py b/api/v1/views.py index 68f0f428..6ae66284 100644 --- a/api/v1/views.py +++ b/api/v1/views.py @@ -15,6 +15,7 @@ from .serializers.course import ( CategorySerializer, LikeSerializer, CourseSerializer, CourseCreateSerializer, CourseBulkChangeCategorySerializer, + CommentSerializer, MaterialSerializer, MaterialCreateSerializer, LessonSerializer, LessonCreateSerializer, ) @@ -35,7 +36,12 @@ from .serializers.user import ( from .permissions import IsAdmin, IsAdminOrIsSelf, IsAuthorOrAdmin, IsAuthorObjectOrAdmin -from apps.course.models import Category, Course, Material, Lesson, Like +from apps.course.models import ( + Category, Course, + Comment, CourseComment, LessonComment, + Material, Lesson, + Like, +) from apps.content.models import ( Image, Text, ImageText, Video, Gallery, GalleryImage, ImageObject, @@ -329,3 +335,9 @@ class ConfigViewSet(generics.RetrieveUpdateAPIView): if serializer.is_valid(): serializer.update(get_values(), serializer.validated_data) return Response(serializer.data) + + +class CommentViewSet(ExtendedModelViewSet): + queryset = Comment.objects.all() + serializer_class = CommentSerializer + permission_classes = (IsAdmin,)