Merge pull request #304 from KiwiTechLLC/ZBKBCK-50

modified pagination in task list and junior task list api
This commit is contained in:
dilipshrivastwa-kiwi
2023-09-05 14:02:16 +05:30
committed by GitHub
5 changed files with 32 additions and 36 deletions

View File

@ -185,13 +185,13 @@ def send_support_email(name, sender, message):
return name return name
def custom_response(detail, data=None, total_pages=None, current_page=None, response_status=status.HTTP_200_OK, count=None): def custom_response(detail, data=None, response_status=status.HTTP_200_OK, count=None):
"""Custom response code""" """Custom response code"""
if not data: if not data:
"""when data is none""" """when data is none"""
data = None data = None
return Response({"data": data, "message": detail, "total_pages":total_pages, "current_page":current_page, return Response({"data": data, "message": detail, "status": "success",
"status": "success", "code": response_status, "count": count}) "code": response_status, "count": count})
def custom_error_response(detail, response_status): def custom_error_response(detail, response_status):

View File

@ -17,6 +17,7 @@ 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
from base.pagination import CustomPageNumberPagination
# Import guardian's model, # Import guardian's model,
# Import junior's model, # Import junior's model,
# Import account's model, # Import account's model,
@ -147,8 +148,8 @@ class TaskListAPIView(viewsets.ModelViewSet):
def get_queryset(self): def get_queryset(self):
queryset = JuniorTask.objects.filter(guardian__user=self.request.user queryset = JuniorTask.objects.filter(guardian__user=self.request.user
).prefetch_related('junior', 'junior__auth' ).select_related('junior', 'junior__auth'
).order_by('due_date', 'created_at') ).order_by('due_date', 'created_at')
queryset = self.filter_queryset(queryset) queryset = self.filter_queryset(queryset)
return queryset return queryset
@ -156,23 +157,19 @@ class TaskListAPIView(viewsets.ModelViewSet):
def list(self, request, *args, **kwargs): def list(self, request, *args, **kwargs):
"""Create guardian profile""" """Create guardian profile"""
status_value = self.request.GET.get('status') status_value = self.request.GET.get('status')
current_page = self.request.GET.get('page')
junior = self.request.GET.get('junior') junior = self.request.GET.get('junior')
queryset = self.get_queryset() queryset = self.get_queryset()
task_status = task_status_fun(status_value) task_status = task_status_fun(status_value)
if status_value and not junior: if status_value:
queryset = queryset.filter(task_status__in=task_status) queryset = queryset.filter(task_status__in=task_status)
elif status_value and junior: if junior:
queryset = queryset.filter(task_status__in=task_status,junior=int(junior)) queryset = queryset.filter(junior=int(junior))
paginator = self.pagination_class() paginator = CustomPageNumberPagination()
total_count = len(queryset)
total_pages = math.ceil(total_count/10)
# use Pagination # use Pagination
paginated_queryset = paginator.paginate_queryset(queryset, request) paginated_queryset = paginator.paginate_queryset(queryset, request)
# use TaskDetailsSerializer serializer # use TaskDetailsSerializer serializer
serializer = self.serializer_class(paginated_queryset, many=True) serializer = self.serializer_class(paginated_queryset, many=True)
return custom_response(None, serializer.data, total_pages=total_pages, current_page=current_page, return paginator.get_paginated_response(serializer.data)
response_status=status.HTTP_200_OK)
class CreateTaskAPIView(viewsets.ModelViewSet): class CreateTaskAPIView(viewsets.ModelViewSet):

View File

@ -13,6 +13,9 @@ import requests
from rest_framework.viewsets import GenericViewSet, mixins from rest_framework.viewsets import GenericViewSet, mixins
import math import math
from base.pagination import CustomPageNumberPagination
"""Django app import""" """Django app import"""
from drf_yasg.utils import swagger_auto_schema from drf_yasg.utils import swagger_auto_schema
from drf_yasg import openapi from drf_yasg import openapi
@ -354,8 +357,8 @@ class JuniorTaskListAPIView(viewsets.ModelViewSet):
def get_queryset(self): def get_queryset(self):
queryset = JuniorTask.objects.filter(junior__auth=self.request.user queryset = JuniorTask.objects.filter(junior__auth=self.request.user
).prefetch_related('junior', 'junior__auth' ).select_related('junior', 'junior__auth'
).order_by('due_date', 'created_at') ).order_by('due_date', 'created_at')
queryset = self.filter_queryset(queryset) queryset = self.filter_queryset(queryset)
return queryset return queryset
@ -367,20 +370,16 @@ class JuniorTaskListAPIView(viewsets.ModelViewSet):
page=1""" page=1"""
try: try:
status_value = self.request.GET.get('status') status_value = self.request.GET.get('status')
current_page = self.request.GET.get('page')
queryset = self.get_queryset() queryset = self.get_queryset()
task_status = task_status_fun(status_value) task_status = task_status_fun(status_value)
if status_value: if status_value:
queryset = queryset.filter(task_status__in=task_status) queryset = queryset.filter(task_status__in=task_status)
paginator = self.pagination_class() paginator = CustomPageNumberPagination()
total_count = len(queryset)
total_pages = math.ceil(total_count / 10)
# use Pagination # use Pagination
paginated_queryset = paginator.paginate_queryset(queryset, request) paginated_queryset = paginator.paginate_queryset(queryset, request)
# use TaskDetails juniorSerializer serializer # use TaskDetails juniorSerializer serializer
serializer = self.serializer_class(paginated_queryset, many=True) serializer = self.serializer_class(paginated_queryset, many=True)
return custom_response(None, serializer.data, total_pages=total_pages, current_page=current_page, return paginator.get_paginated_response(serializer.data)
response_status=status.HTTP_200_OK)
except Exception as e: except Exception as e:
return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST) return custom_error_response(str(e), response_status=status.HTTP_400_BAD_REQUEST)

View File

@ -230,7 +230,7 @@ class DefaultArticleCardImagesViewSet(GenericViewSet, mixins.CreateModelMixin, m
:param request: :param request:
:return: default article card images :return: default article card images
""" """
queryset = self.queryset queryset = self.get_queryset()
serializer = self.serializer_class(queryset, many=True) serializer = self.serializer_class(queryset, many=True)
return custom_response(None, data=serializer.data) return custom_response(None, data=serializer.data)

View File

@ -41,20 +41,20 @@ ENV = os.getenv('ENV')
CORS_ORIGIN_ALLOW_ALL = False CORS_ORIGIN_ALLOW_ALL = False
# Allow specific origins # Allow specific origins
# if ENV in ['dev', 'qa', 'stage']: if ENV in ['dev', 'qa', 'stage']:
CORS_ALLOWED_ORIGINS = [ CORS_ALLOWED_ORIGINS = [
# backend base url # backend base url
"https://dev-api.zodqaapp.com", "https://dev-api.zodqaapp.com",
"https://qa-api.zodqaapp.com", "https://qa-api.zodqaapp.com",
"https://stage-api.zodqaapp.com", "https://stage-api.zodqaapp.com",
# frontend url # frontend url
"http://localhost:3000", "http://localhost:3000",
"https://zod-dev.zodqaapp.com", "https://zod-dev.zodqaapp.com",
"https://zod-qa.zodqaapp.com", "https://zod-qa.zodqaapp.com",
"https://zod-stage.zodqaapp.com", "https://zod-stage.zodqaapp.com",
# Add more trusted origins as needed # Add more trusted origins as needed
] ]
if ENV == "prod": if ENV == "prod":
CORS_ALLOWED_ORIGINS = [] CORS_ALLOWED_ORIGINS = []