From ae0fc4fe8d02f2aff2f2594a3fb63ac041f3c25e Mon Sep 17 00:00:00 2001 From: jain Date: Mon, 7 Aug 2023 17:06:31 +0530 Subject: [PATCH] article list api --- notifications/serializers.py | 4 --- notifications/views.py | 13 +++------ web_admin/serializers/article_serializer.py | 19 ++++++++++++ web_admin/urls.py | 4 +-- web_admin/views/article.py | 32 ++++++++++++++++++++- 5 files changed, 56 insertions(+), 16 deletions(-) diff --git a/notifications/serializers.py b/notifications/serializers.py index a085cf6..ff05dcd 100644 --- a/notifications/serializers.py +++ b/notifications/serializers.py @@ -41,7 +41,3 @@ class ReadNotificationSerializer(serializers.ModelSerializer): """Meta class""" model = Notification fields = ('id',) - def update(self, instance, validated_data): - instance.is_read = True - instance.save() - return instance diff --git a/notifications/views.py b/notifications/views.py index d5477b8..3d2ff4a 100644 --- a/notifications/views.py +++ b/notifications/views.py @@ -62,15 +62,10 @@ class ReadNotification(views.APIView): def put(self, request, format=None): try: - notification_id = str(self.request.data.get('notification_id')) - notification_queryset = Notification.objects.filter(id=notification_id, notification_to=self.request.user).last() + notification_id = self.request.data.get('notification_id') + notification_queryset = Notification.objects.filter(id__in=notification_id, + notification_to=self.request.user).update(is_read=True) if notification_queryset: - # use ReadNotificationSerializer serializer - serializer = ReadNotificationSerializer(notification_queryset, data=request.data, partial=True) - if serializer.is_valid(): - # save serializer - serializer.save() - return custom_response(SUCCESS_CODE['3039'], response_status=status.HTTP_200_OK) - return custom_error_response(serializer.errors, response_status=status.HTTP_400_BAD_REQUEST) + return custom_response(SUCCESS_CODE['3039'], response_status=status.HTTP_200_OK) except Exception as e: return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST) diff --git a/web_admin/serializers/article_serializer.py b/web_admin/serializers/article_serializer.py index 427f20d..5b42686 100644 --- a/web_admin/serializers/article_serializer.py +++ b/web_admin/serializers/article_serializer.py @@ -214,3 +214,22 @@ class DefaultArticleCardImageSerializer(serializers.ModelSerializer): card_image = DefaultArticleCardImage.objects.create(**validated_data) return card_image + +class ArticleListSerializer(serializers.ModelSerializer): + """ + serializer for article API + """ + article_cards = ArticleCardSerializer(many=True) + total_points = serializers.SerializerMethodField('get_total_points') + + class Meta: + """ + meta class + """ + model = Article + fields = ('id', 'title', 'description', 'article_cards', 'total_points') + + def get_total_points(self, obj): + """total points of article""" + total_question = ArticleSurvey.objects.filter(article=obj).count() + return total_question * 5 diff --git a/web_admin/urls.py b/web_admin/urls.py index 30645a2..065d30d 100644 --- a/web_admin/urls.py +++ b/web_admin/urls.py @@ -6,7 +6,7 @@ from django.urls import path, include from rest_framework import routers # local imports -from web_admin.views.article import ArticleViewSet, DefaultArticleCardImagesViewSet +from web_admin.views.article import ArticleViewSet, DefaultArticleCardImagesViewSet, ArticleListViewSet from web_admin.views.auth import ForgotAndResetPasswordViewSet from web_admin.views.user_management import UserManagementViewSet @@ -16,7 +16,7 @@ router = routers.SimpleRouter() router.register('article', ArticleViewSet, basename='article') router.register('default-card-images', DefaultArticleCardImagesViewSet, basename='default-card-images') router.register('user-management', UserManagementViewSet, basename='user') - +router.register('article-list', ArticleListViewSet, basename='article-list') # forgot and reset password api for admin router.register('admin', ForgotAndResetPasswordViewSet, basename='admin') diff --git a/web_admin/views/article.py b/web_admin/views/article.py index 53da6e1..f334650 100644 --- a/web_admin/views/article.py +++ b/web_admin/views/article.py @@ -16,7 +16,7 @@ from base.messages import SUCCESS_CODE, ERROR_CODE from web_admin.models import Article, ArticleCard, ArticleSurvey, DefaultArticleCardImage from web_admin.permission import AdminPermission from web_admin.serializers.article_serializer import (ArticleSerializer, ArticleCardSerializer, - DefaultArticleCardImageSerializer) + DefaultArticleCardImageSerializer, ArticleListSerializer) USER = get_user_model() @@ -195,3 +195,33 @@ class DefaultArticleCardImagesViewSet(GenericViewSet, mixins.CreateModelMixin, m return custom_response(None, data=serializer.data) +class ArticleListViewSet(GenericViewSet, mixins.ListModelMixin): + """ + article api + """ + serializer_class = ArticleListSerializer + permission_classes = [IsAuthenticated,] + queryset = Article + http_method_names = ['get',] + + def get_queryset(self): + article = self.queryset.objects.filter(is_deleted=False).prefetch_related( + 'article_cards', 'article_survey', 'article_survey__options' + ).order_by('-created_at') + queryset = self.filter_queryset(article) + return queryset + + def list(self, request, *args, **kwargs): + """ + article list api method + :param request: + :param args: + :param kwargs: + :return: list of article + """ + queryset = self.get_queryset() + count = queryset.count() + paginator = self.pagination_class() + paginated_queryset = paginator.paginate_queryset(queryset, request) + serializer = self.serializer_class(paginated_queryset, many=True) + return custom_response(None, data=serializer.data, count=count)