Merge pull request #264 from KiwiTechLLC/dev

Dev
This commit is contained in:
Ankitajain-kiwi
2023-08-24 19:19:05 +05:30
committed by GitHub
6 changed files with 36 additions and 28 deletions

View File

@ -45,7 +45,11 @@ class CustomMiddleware(object):
api_endpoint = request.path api_endpoint = request.path
if request.user.is_authenticated: if request.user.is_authenticated:
# device details # device details
device_details = UserDeviceDetails.objects.filter(user=request.user, device_id=device_id).last() if device_id:
device_details = UserDeviceDetails.objects.filter(user=request.user, device_id=device_id).last()
if not device_details and api_endpoint != '/api/v1/user/login/':
custom_error = custom_error_response(ERROR_CODE['2037'], response_status=status.HTTP_404_NOT_FOUND)
response = custom_response(custom_error)
if user_type and str(user_type) == str(NUMBER['one']): if user_type and str(user_type) == str(NUMBER['one']):
junior = Junior.objects.filter(auth=request.user, is_active=False).last() junior = Junior.objects.filter(auth=request.user, is_active=False).last()
if junior: if junior:
@ -56,13 +60,11 @@ class CustomMiddleware(object):
if guardian: if guardian:
custom_error = custom_error_response(ERROR_CODE['2075'], response_status=status.HTTP_404_NOT_FOUND) custom_error = custom_error_response(ERROR_CODE['2075'], response_status=status.HTTP_404_NOT_FOUND)
response = custom_response(custom_error) response = custom_response(custom_error)
if device_id and not device_details and api_endpoint != '/api/v1/user/login/':
custom_error = custom_error_response(ERROR_CODE['2037'], response_status=status.HTTP_404_NOT_FOUND) if version and device_type:
response = custom_response(custom_error) force_update = ForceUpdate.objects.filter(version=version, device_type=device_type).last()
force_update = ForceUpdate.objects.filter(version=version, device_type=device_type).last() if not force_update:
api_endpoint_checks = not any(endpoint in api_endpoint for endpoint in ['/admin/', '/api/v1/admin/']) custom_error = custom_error_response(ERROR_CODE['2079'],
if not force_update and version and device_type: response_status=status.HTTP_308_PERMANENT_REDIRECT)
custom_error = custom_error_response(ERROR_CODE['2079'], response = custom_response(custom_error, status.HTTP_308_PERMANENT_REDIRECT)
response_status=status.HTTP_308_PERMANENT_REDIRECT)
response = custom_response(custom_error, status.HTTP_308_PERMANENT_REDIRECT)
return response return response

View File

@ -43,7 +43,8 @@ FILE_SIZE = 5 * 1024 * 1024
# String constant for configurable date for allocation lock period # String constant for configurable date for allocation lock period
ALLOCATION_LOCK_DATE = 1 ALLOCATION_LOCK_DATE = 1
# guardian code status tuple
guardian_code_tuple = ('1','3')
"""user type""" """user type"""
USER_TYPE = ( USER_TYPE = (
('1', 'junior'), ('1', 'junior'),

View File

@ -10,7 +10,7 @@ from rest_framework.permissions import IsAuthenticated
from rest_framework import viewsets, status from rest_framework import viewsets, status
from rest_framework.pagination import PageNumberPagination from rest_framework.pagination import PageNumberPagination
from django.contrib.auth.models import User from django.contrib.auth.models import User
from base.constants import guardian_code_tuple
from rest_framework.filters import SearchFilter from rest_framework.filters import SearchFilter
from django.utils import timezone from django.utils import timezone
@ -178,7 +178,8 @@ class CreateTaskAPIView(viewsets.ModelViewSet):
junior = request.data['junior'] junior = request.data['junior']
junior_id = Junior.objects.filter(id=junior).last() junior_id = Junior.objects.filter(id=junior).last()
guardian_data = Guardian.objects.filter(user=request.user).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) return custom_error_response(ERROR_CODE['2078'], response_status=status.HTTP_400_BAD_REQUEST)
allowed_extensions = ['.jpg', '.jpeg', '.png'] allowed_extensions = ['.jpg', '.jpeg', '.png']
if not any(extension in str(image) for extension in allowed_extensions): if not any(extension in str(image) for extension in allowed_extensions):

View File

@ -191,6 +191,8 @@ class AddJuniorAPIView(viewsets.ModelViewSet):
return custom_error_response(ERROR_CODE['2077'], response_status=status.HTTP_400_BAD_REQUEST) return custom_error_response(ERROR_CODE['2077'], response_status=status.HTTP_400_BAD_REQUEST)
elif not data: elif not data:
return custom_error_response(ERROR_CODE['2076'], response_status=status.HTTP_400_BAD_REQUEST) 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) return custom_response(SUCCESS_CODE['3021'], response_status=status.HTTP_200_OK)
# use AddJuniorSerializer serializer # use AddJuniorSerializer serializer
serializer = AddJuniorSerializer(data=request.data, context=info_data) serializer = AddJuniorSerializer(data=request.data, context=info_data)
@ -209,10 +211,12 @@ class AddJuniorAPIView(viewsets.ModelViewSet):
return none return none
if junior.guardian_code and (guardian.guardian_code in junior.guardian_code): if junior.guardian_code and (guardian.guardian_code in junior.guardian_code):
return False 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) junior.guardian_code.append(guardian.guardian_code)
else: else:
junior.guardian_code = [guardian.guardian_code] return "Max"
junior.guardian_code_status = str(NUMBER['two']) junior.guardian_code_status = str(NUMBER['two'])
junior.save() junior.save()
JuniorGuardianRelationship.objects.get_or_create(guardian=guardian, junior=junior, JuniorGuardianRelationship.objects.get_or_create(guardian=guardian, junior=junior,
@ -616,7 +620,7 @@ class CheckAnswerAPIView(viewsets.ModelViewSet):
answer_id = self.request.GET.get('answer_id') answer_id = self.request.GET.get('answer_id')
current_page = self.request.GET.get('current_page') current_page = self.request.GET.get('current_page')
queryset = self.get_queryset() queryset = self.get_queryset()
submit_ans = SurveyOption.objects.filter(id=answer_id, is_answer=True).last() submit_ans = SurveyOption.objects.filter(id=answer_id).last()
junior_article_points = JuniorArticlePoints.objects.filter(junior__auth=self.request.user, junior_article_points = JuniorArticlePoints.objects.filter(junior__auth=self.request.user,
question=queryset) question=queryset)
if submit_ans: if submit_ans:

View File

@ -219,8 +219,7 @@ class ArticleListSerializer(serializers.ModelSerializer):
""" """
serializer for article API serializer for article API
""" """
article_cards = ArticleCardSerializer(many=True) image = serializers.SerializerMethodField('get_image')
article_survey = ArticleSurveySerializer(many=True)
total_points = serializers.SerializerMethodField('get_total_points') total_points = serializers.SerializerMethodField('get_total_points')
is_completed = serializers.SerializerMethodField('get_is_completed') is_completed = serializers.SerializerMethodField('get_is_completed')
@ -229,12 +228,16 @@ class ArticleListSerializer(serializers.ModelSerializer):
meta class meta class
""" """
model = Article 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): def get_total_points(self, obj):
"""total points of article""" """total points of article"""
total_question = ArticleSurvey.objects.filter(article=obj).count() return obj.article_survey.all().count() * NUMBER['five']
return total_question * NUMBER['five']
def get_is_completed(self, obj): def get_is_completed(self, obj):
"""complete all question""" """complete all question"""
@ -268,14 +271,14 @@ class ArticleQuestionSerializer(serializers.ModelSerializer):
ans_obj = SurveyOption.objects.filter(survey=obj, is_answer=True).last() ans_obj = SurveyOption.objects.filter(survey=obj, is_answer=True).last()
if ans_obj: if ans_obj:
return ans_obj.id return ans_obj.id
return str("None") return None
def get_attempted_answer(self, obj): def get_attempted_answer(self, obj):
"""attempt question or not""" """attempt question or not"""
context_data = self.context.get('user') context_data = self.context.get('user')
junior_article_obj = JuniorArticlePoints.objects.filter(junior__auth=context_data, junior_article_obj = JuniorArticlePoints.objects.filter(junior__auth=context_data,
question=obj, is_answer_correct=True).last() question=obj).last()
if junior_article_obj: if junior_article_obj and junior_article_obj.submitted_answer:
return junior_article_obj.submitted_answer.id return junior_article_obj.submitted_answer.id
return None return None

View File

@ -229,10 +229,7 @@ class ArticleListViewSet(GenericViewSet, mixins.ListModelMixin):
http_method_names = ['get',] http_method_names = ['get',]
def get_queryset(self): def get_queryset(self):
article = self.queryset.objects.filter(is_deleted=False, is_published=True).prefetch_related( queryset = self.queryset.objects.filter(is_deleted=False, is_published=True).order_by('-created_at')
'article_cards', 'article_survey', 'article_survey__options'
).order_by('-created_at')
queryset = self.filter_queryset(article)
return queryset return queryset
def list(self, request, *args, **kwargs): def list(self, request, *args, **kwargs):