From e1ff439acbbf4a8512974d256b06d29b1341d85b Mon Sep 17 00:00:00 2001
From: Richard Blechinger <hello@pretzelhands.com>
Date: Thu, 18 Nov 2021 12:17:21 +0100
Subject: [PATCH] Add customizable ordering for timeslot queryset

---
 program/views.py | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/program/views.py b/program/views.py
index 520e003b..639589af 100644
--- a/program/views.py
+++ b/program/views.py
@@ -522,17 +522,20 @@ class APITimeSlotViewSet(viewsets.ModelViewSet):
     def get_queryset(self):
         show_pk = int_or_none('show_pk', self.kwargs)
         schedule_pk = int_or_none('schedule_pk', self.kwargs)
-
         # Filters
 
         # Return next 60 days by default
         start = datetime.combine(date.today(), time(0, 0))
         end = start + timedelta(days=60)
 
+
         if ('start' in self.request.query_params) and ('end' in self.request.query_params):
             start = datetime.combine(datetime.strptime(self.request.query_params.get('start'), '%Y-%m-%d').date(), time(0, 0))
             end = datetime.combine(datetime.strptime(self.request.query_params.get('end'), '%Y-%m-%d').date(), time(23, 59))
 
+        # Is this safe?
+        order = self.request.query_params.get('order', '-start')
+
         # Endpoints
 
         #
@@ -541,7 +544,7 @@ class APITimeSlotViewSet(viewsets.ModelViewSet):
         #     Returns timeslots of the given show and schedule
         #
         if show_pk and schedule_pk:
-            return TimeSlot.objects.filter(show=show_pk, schedule=schedule_pk, start__gte=start, end__lte=end).order_by('start')
+            return TimeSlot.objects.filter(show=show_pk, schedule=schedule_pk, start__gte=start, end__lte=end).order_by(order)
 
         #
         #     /shows/1/timeslots/
@@ -549,7 +552,7 @@ class APITimeSlotViewSet(viewsets.ModelViewSet):
         #     Returns timeslots of the show
         #
         elif show_pk and schedule_pk is None:
-            return TimeSlot.objects.filter(show=show_pk, start__gte=start, end__lte=end).order_by('start')
+            return TimeSlot.objects.filter(show=show_pk, start__gte=start, end__lte=end).order_by(order)
 
         #
         #     /timeslots/
@@ -557,7 +560,7 @@ class APITimeSlotViewSet(viewsets.ModelViewSet):
         #     Returns all timeslots
         #
         else:
-            return TimeSlot.objects.filter(start__gte=start, end__lte=end).order_by('start')
+            return TimeSlot.objects.filter(start__gte=start, end__lte=end).order_by(order)
 
     def retrieve(self, request, *args, **kwargs):
         pk = int_or_none('pk', self.kwargs)
-- 
GitLab