Commit c9731bfc authored by Ilham Maulana's avatar Ilham Maulana 💻

feat: pagination

parent 895ae970
from django.http import JsonResponse
from django.core.paginator import Paginator
from django.views.decorators.csrf import csrf_exempt
from book.models import Book, Category
......@@ -10,6 +10,7 @@ def bookView(request):
books = Book.objects.all().order_by("created_at")
category = request.GET.get("category")
keyword = request.GET.get("search")
page_number = request.GET.get("page", 1)
if request.method == "GET":
if category:
......@@ -18,8 +19,11 @@ def bookView(request):
if keyword and len(keyword) >= 3:
books = books.filter(title__icontains=keyword)
paginator = Paginator(books, 10)
page_obj = paginator.get_page(page_number)
data = []
for book_item in books:
for book_item in page_obj:
if book_item.category is not None:
book = {
"id": book_item.id,
......@@ -40,7 +44,16 @@ def bookView(request):
"cover_image": "http://127.0.0.1:8000" + book_item.cover_image.url,
}
data.append(book)
return JsonResponse(data, status=200, safe=False)
response_data = {
"data": data,
"has_next": page_obj.has_next(),
"has_prev": page_obj.has_previous(),
"page_number": page_obj.number,
"total_pages": paginator.num_pages,
}
return JsonResponse(response_data, status=200, safe=False)
return JsonResponse({"message": "Invalid request method"}, status=405)
......
import jwt
from django.utils import timezone
from django.http import JsonResponse
from django.core.paginator import Paginator
from django.views.decorators.csrf import csrf_exempt
from loans.models import BookLoan
......@@ -16,6 +17,7 @@ def bookLoanView(request):
loans = BookLoan.objects.all().order_by("loan_date")
near_outstanding = request.GET.get("near_outstanding")
overdue = request.GET.get("overdue")
page_number = request.GET.get("page", 1)
try:
token = header_authorization.split(" ")[1]
......@@ -32,8 +34,11 @@ def bookLoanView(request):
"loan_date"
)
paginator = Paginator(loans, 10)
page_obj = paginator.get_page(page_number)
data = []
for loan_item in loans:
for loan_item in page_obj:
remaining_loan_time = (
str(loan_item.due_date.day - now.day) + " days left"
)
......@@ -61,7 +66,15 @@ def bookLoanView(request):
}
data.append(loan_obj)
return JsonResponse(data, safe=False, status=200)
response_data = {
"data": data,
"has_next": page_obj.has_next(),
"has_prev": page_obj.has_previous(),
"page_number": page_obj.number,
"total_pages": paginator.num_pages,
}
return JsonResponse(response_data, safe=False, status=200)
except jwt.exceptions.InvalidTokenError:
return JsonResponse({"message": "Unauthorized"}, status=401)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment