Files
igny8/backend/igny8_core/api/pagination.py

50 lines
1.5 KiB
Python

"""
Custom pagination class for DRF to support dynamic page_size query parameter
and unified response format
"""
from rest_framework.pagination import PageNumberPagination
from .response import get_request_id
class CustomPageNumberPagination(PageNumberPagination):
"""
Custom pagination class that allows clients to override the page size
via the page_size query parameter.
Default page size: 10
Max page size: 100
Returns unified format with success field
"""
page_size = 10
page_size_query_param = 'page_size'
max_page_size = 100
def paginate_queryset(self, queryset, request, view=None):
"""
Override to store request for later use in get_paginated_response
"""
self.request = request
return super().paginate_queryset(queryset, request, view)
def get_paginated_response(self, data):
"""
Return a paginated response with unified format including success field
"""
from rest_framework.response import Response
response_data = {
'success': True,
'count': self.page.paginator.count,
'next': self.get_next_link(),
'previous': self.get_previous_link(),
'results': data
}
# Add request_id if request is available
if hasattr(self, 'request') and self.request:
response_data['request_id'] = get_request_id(self.request)
return Response(response_data)