From e9aa2dfda98d527f7efdaa7122a92c728a726cdf Mon Sep 17 00:00:00 2001 From: jain Date: Thu, 24 Aug 2023 16:08:20 +0530 Subject: [PATCH] limit for 3 guardian code and article list API optimization --- base/constants.py | 3 ++- guardian/views.py | 5 +++-- junior/views.py | 8 ++++++-- web_admin/serializers/article_serializer.py | 10 +++++++--- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/base/constants.py b/base/constants.py index 1ab15a2..da203ae 100644 --- a/base/constants.py +++ b/base/constants.py @@ -43,7 +43,8 @@ FILE_SIZE = 5 * 1024 * 1024 # String constant for configurable date for allocation lock period ALLOCATION_LOCK_DATE = 1 - +# guardian code status tuple +guardian_code_tuple = ('1','3') """user type""" USER_TYPE = ( ('1', 'junior'), diff --git a/guardian/views.py b/guardian/views.py index e49beaf..b541660 100644 --- a/guardian/views.py +++ b/guardian/views.py @@ -10,7 +10,7 @@ from rest_framework.permissions import IsAuthenticated from rest_framework import viewsets, status from rest_framework.pagination import PageNumberPagination from django.contrib.auth.models import User - +from base.constants import guardian_code_tuple from rest_framework.filters import SearchFilter from django.utils import timezone @@ -178,7 +178,8 @@ class CreateTaskAPIView(viewsets.ModelViewSet): junior = request.data['junior'] junior_id = Junior.objects.filter(id=junior).last() guardian_data = Guardian.objects.filter(user=request.user).last() - if guardian_data.guardian_code not in junior_id.guardian_code: + if (guardian_data.guardian_code not in junior_id.guardian_code or + junior_id.guardian_code_status in guardian_code_tuple): return custom_error_response(ERROR_CODE['2078'], response_status=status.HTTP_400_BAD_REQUEST) allowed_extensions = ['.jpg', '.jpeg', '.png'] if not any(extension in str(image) for extension in allowed_extensions): diff --git a/junior/views.py b/junior/views.py index 2abd61d..96b9222 100644 --- a/junior/views.py +++ b/junior/views.py @@ -191,6 +191,8 @@ class AddJuniorAPIView(viewsets.ModelViewSet): return custom_error_response(ERROR_CODE['2077'], response_status=status.HTTP_400_BAD_REQUEST) elif not data: return custom_error_response(ERROR_CODE['2076'], response_status=status.HTTP_400_BAD_REQUEST) + if data == "Max": + return custom_error_response(ERROR_CODE['2081'], response_status=status.HTTP_400_BAD_REQUEST) return custom_response(SUCCESS_CODE['3021'], response_status=status.HTTP_200_OK) # use AddJuniorSerializer serializer serializer = AddJuniorSerializer(data=request.data, context=info_data) @@ -209,10 +211,12 @@ class AddJuniorAPIView(viewsets.ModelViewSet): return none if junior.guardian_code and (guardian.guardian_code in junior.guardian_code): return False - if type(junior.guardian_code) is list: + if not junior.guardian_code: + junior.guardian_code = [guardian.guardian_code] + if type(junior.guardian_code) is list and len(junior.guardian_code) < 4: junior.guardian_code.append(guardian.guardian_code) else: - junior.guardian_code = [guardian.guardian_code] + return "Max" junior.guardian_code_status = str(NUMBER['two']) junior.save() JuniorGuardianRelationship.objects.get_or_create(guardian=guardian, junior=junior, diff --git a/web_admin/serializers/article_serializer.py b/web_admin/serializers/article_serializer.py index e125acf..62d09d4 100644 --- a/web_admin/serializers/article_serializer.py +++ b/web_admin/serializers/article_serializer.py @@ -219,8 +219,7 @@ class ArticleListSerializer(serializers.ModelSerializer): """ serializer for article API """ - article_cards = ArticleCardSerializer(many=True) - article_survey = ArticleSurveySerializer(many=True) + image = serializers.SerializerMethodField('get_image') total_points = serializers.SerializerMethodField('get_total_points') is_completed = serializers.SerializerMethodField('get_is_completed') @@ -229,8 +228,13 @@ class ArticleListSerializer(serializers.ModelSerializer): meta class """ model = Article - fields = ('id', 'title', 'description', 'article_cards', 'article_survey', 'total_points', 'is_completed') + fields = ('id', 'title', 'description','image', 'total_points', 'is_completed') + def get_image(self, obj): + """article image""" + if obj.article_cards.first(): + return obj.article_cards.first().image_url + return None def get_total_points(self, obj): """total points of article""" total_question = ArticleSurvey.objects.filter(article=obj).count()