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

feat: pagination

parent 895ae970
from django.http import JsonResponse from django.http import JsonResponse
from django.core.paginator import Paginator
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from book.models import Book, Category from book.models import Book, Category
...@@ -10,6 +10,7 @@ def bookView(request): ...@@ -10,6 +10,7 @@ def bookView(request):
books = Book.objects.all().order_by("created_at") books = Book.objects.all().order_by("created_at")
category = request.GET.get("category") category = request.GET.get("category")
keyword = request.GET.get("search") keyword = request.GET.get("search")
page_number = request.GET.get("page", 1)
if request.method == "GET": if request.method == "GET":
if category: if category:
...@@ -18,8 +19,11 @@ def bookView(request): ...@@ -18,8 +19,11 @@ def bookView(request):
if keyword and len(keyword) >= 3: if keyword and len(keyword) >= 3:
books = books.filter(title__icontains=keyword) books = books.filter(title__icontains=keyword)
paginator = Paginator(books, 10)
page_obj = paginator.get_page(page_number)
data = [] data = []
for book_item in books: for book_item in page_obj:
if book_item.category is not None: if book_item.category is not None:
book = { book = {
"id": book_item.id, "id": book_item.id,
...@@ -40,7 +44,16 @@ def bookView(request): ...@@ -40,7 +44,16 @@ def bookView(request):
"cover_image": "http://127.0.0.1:8000" + book_item.cover_image.url, "cover_image": "http://127.0.0.1:8000" + book_item.cover_image.url,
} }
data.append(book) 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) return JsonResponse({"message": "Invalid request method"}, status=405)
......
import jwt import jwt
from django.utils import timezone from django.utils import timezone
from django.http import JsonResponse from django.http import JsonResponse
from django.core.paginator import Paginator
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from loans.models import BookLoan from loans.models import BookLoan
...@@ -16,6 +17,7 @@ def bookLoanView(request): ...@@ -16,6 +17,7 @@ def bookLoanView(request):
loans = BookLoan.objects.all().order_by("loan_date") loans = BookLoan.objects.all().order_by("loan_date")
near_outstanding = request.GET.get("near_outstanding") near_outstanding = request.GET.get("near_outstanding")
overdue = request.GET.get("overdue") overdue = request.GET.get("overdue")
page_number = request.GET.get("page", 1)
try: try:
token = header_authorization.split(" ")[1] token = header_authorization.split(" ")[1]
...@@ -32,8 +34,11 @@ def bookLoanView(request): ...@@ -32,8 +34,11 @@ def bookLoanView(request):
"loan_date" "loan_date"
) )
paginator = Paginator(loans, 10)
page_obj = paginator.get_page(page_number)
data = [] data = []
for loan_item in loans: for loan_item in page_obj:
remaining_loan_time = ( remaining_loan_time = (
str(loan_item.due_date.day - now.day) + " days left" str(loan_item.due_date.day - now.day) + " days left"
) )
...@@ -61,7 +66,15 @@ def bookLoanView(request): ...@@ -61,7 +66,15 @@ def bookLoanView(request):
} }
data.append(loan_obj) 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: except jwt.exceptions.InvalidTokenError:
return JsonResponse({"message": "Unauthorized"}, status=401) 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