From bbd346e4a973e5038b3947fbc65b53a0364ba1b3 Mon Sep 17 00:00:00 2001 From: rb-25 Date: Wed, 1 May 2024 14:56:19 +0530 Subject: [PATCH] feat: added min year to newsletter response --- .../core/api/views/newsletters.py | 8 +++----- .../customs/pagination.py | 20 ++++++++++++++++++- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/student_welfare_backend/student_welfare_backend/core/api/views/newsletters.py b/student_welfare_backend/student_welfare_backend/core/api/views/newsletters.py index fbba4b3..17c6b63 100644 --- a/student_welfare_backend/student_welfare_backend/core/api/views/newsletters.py +++ b/student_welfare_backend/student_welfare_backend/core/api/views/newsletters.py @@ -15,7 +15,7 @@ from student_welfare_backend.core.models import Newsletter from student_welfare_backend.core.api.serializers import NewsletterSerializer -from student_welfare_backend.customs.pagination import CustomPagination +from student_welfare_backend.customs.pagination import CustomPagination,NewsletterPagination from student_welfare_backend.customs.permissions import IsDSW, IsADSW from student_welfare_backend.customs.views import BaseBulkUploadView, BaseBulkDownloadView @@ -25,7 +25,7 @@ class NewsletterViewSet(ReadOnlyModelViewSet): permission_classes = [] queryset = Newsletter.objects.all() serializer_class = NewsletterSerializer - pagination_class = CustomPagination + pagination_class = NewsletterPagination filter_backends = [filters.SearchFilter, filters.OrderingFilter, DjangoFilterBackend] filterset_fields = ["year", "month"] search_fields = ["year", "month"] @@ -38,7 +38,6 @@ def get_month_index(self, month_name): def get_queryset(self): queryset = super().get_queryset() - # Custom sorting logic: Convert month names to numeric values queryset = queryset.annotate( month_index=Case( @@ -49,8 +48,7 @@ def get_queryset(self): # Order queryset by year (descending) and month_index (descending) queryset = queryset.order_by('-year', '-month_index') - - return queryset + return (queryset) class NewsletterAdminViewSet(ModelViewSet): diff --git a/student_welfare_backend/student_welfare_backend/customs/pagination.py b/student_welfare_backend/student_welfare_backend/customs/pagination.py index cc359ae..35865a9 100644 --- a/student_welfare_backend/student_welfare_backend/customs/pagination.py +++ b/student_welfare_backend/student_welfare_backend/customs/pagination.py @@ -1,7 +1,25 @@ from rest_framework.pagination import PageNumberPagination - +from rest_framework.response import Response +from student_welfare_backend.core.models import Newsletter +from django.db.models import Min class CustomPagination(PageNumberPagination): page_size = 10 page_size_query_param = "size" max_page_size = 1000 + +class NewsletterPagination(PageNumberPagination): + page_size = 10 + page_size_query_param = "size" + max_page_size = 1000 + + def get_paginated_response(self, data): + min_year = Newsletter.objects.aggregate(Min('year')).get('year__min') + response = super().get_paginated_response(data) + return Response({ + 'min_year': min_year, + 'count': self.page.paginator.count, + 'next': self.get_next_link(), + 'previous': self.get_previous_link(), + 'results': data + }) \ No newline at end of file