From 1c1be05259ee239f1da08d477311005ee7a3eb9d Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Tue, 4 Apr 2017 12:16:18 +0200
Subject: [PATCH] api improved to accept pagination params

---
 smash/web/api_urls.py                |  2 +-
 smash/web/api_views/configuration.py | 16 +++++++++++++++-
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/smash/web/api_urls.py b/smash/web/api_urls.py
index 9440d245..304f018e 100644
--- a/smash/web/api_urls.py
+++ b/smash/web/api_urls.py
@@ -25,7 +25,7 @@ urlpatterns = [
     url(r'^appointment_types$', appointment_type.appointment_types, name='web.api.appointment_types'),
 
     # appointments
-    url(r'^configuration_items$', configuration.configuration_items, name='web.api.configuration'),
+    url(r'^configuration_items$', configuration.configuration_items, name='web.api.configuration_items'),
 
     # subjects data
     url(r'^cities$', subject.cities, name='web.api.cities'),
diff --git a/smash/web/api_views/configuration.py b/smash/web/api_views/configuration.py
index 62d77774..efa7daf0 100644
--- a/smash/web/api_views/configuration.py
+++ b/smash/web/api_views/configuration.py
@@ -6,14 +6,28 @@ from web.models import ConfigurationItem
 
 @login_required
 def configuration_items(request):
+    # id of the query from dataTable: https://datatables.net/manual/server-side
+    draw = int(request.GET.get("draw", "-1"))
+
+    start = int(request.GET.get("start", "0"))
+    length = int(request.GET.get("length", "10"))
+
     items = ConfigurationItem.objects.all()
+    count = items.count()
+    count_filtered = count
+
+    sliced_items = items[start:(start + length)]
+
     data = []
-    for configuration_item in items:
+    for configuration_item in sliced_items:
         data.append({
             "id": configuration_item.id,
             "name": configuration_item.name,
             "value": configuration_item.value
         })
     return JsonResponse({
+        "draw": draw,
+        "recordsTotal": count,
+        "recordsFiltered": count_filtered,
         "data": data
     })
-- 
GitLab