From a0209d64f28d97957e0fc5bd3db0534acb4da5fd Mon Sep 17 00:00:00 2001 From: Patricia Huang Date: Fri, 20 Oct 2023 20:21:31 -0400 Subject: [PATCH 1/2] improve search endpoint --- src/api/urls.py | 2 +- .../controllers/search_ride_controller.py | 10 ++++++---- src/ride/views.py | 19 +++++++++++-------- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/api/urls.py b/src/api/urls.py index 1932e81..48590da 100644 --- a/src/api/urls.py +++ b/src/api/urls.py @@ -15,7 +15,7 @@ path("me/", MeView.as_view(), name="me"), path("rides//", RideView.as_view(), name="ride"), path("rides/", RidesView.as_view(), name="rides"), - path("search/", SearchView.as_view(), name="search"), + path("search/depart//daysbefore//daysafter//start//end//radius//", SearchView.as_view(), name="search"), re_path(r"^requests/", include("request.urls")), re_path(r"^prompts/", include("prompts.urls")) ] diff --git a/src/ride/controllers/search_ride_controller.py b/src/ride/controllers/search_ride_controller.py index 8242675..2c87be5 100644 --- a/src/ride/controllers/search_ride_controller.py +++ b/src/ride/controllers/search_ride_controller.py @@ -20,6 +20,8 @@ def __init__(self, data, request, serializer): def process(self): departure_datetime = self._data.get("departure_datetime") + days_before = self._data.get("days_before") + days_after = self._data.get("days_after") start_location_place_id = self._data.get("start_location_place_id") end_location_place_id = self._data.get("end_location_place_id") radius = self._data.get("radius") @@ -67,13 +69,13 @@ def process(self): departure_datetime ).astimezone(tz) - departure_yesterday = departure_datetime_object - datetime.timedelta(days=1) - departure_tomorrow = departure_datetime_object + datetime.timedelta(days=1) + departure_before = departure_datetime_object - datetime.timedelta(days=days_before) + departure_after = departure_datetime_object + datetime.timedelta(days=days_after) all_rides = Ride.objects.filter( path__in=paths, - departure_datetime__gte=departure_yesterday, - departure_datetime__lte=departure_tomorrow, + departure_datetime__gte=departure_before, + departure_datetime__lte=departure_after, ) # Sort results based on location and time proximity diff --git a/src/ride/views.py b/src/ride/views.py index bb1a528..5552662 100644 --- a/src/ride/views.py +++ b/src/ride/views.py @@ -54,13 +54,16 @@ def post(self, request, id): class SearchView(generics.GenericAPIView): serializer_class = RideSerializer - permission_classes = api_settings.CONSUMER_PERMISSIONS + lookup_fields = ['depart', 'daysbefore', 'daysafter', 'start', 'end', 'radius'] - def post(self, request): + def get(self, request, depart, daysbefore, daysafter, start, end, radius): """Search for a ride.""" - try: - data = json.loads(request.body) - except json.JSONDecodeError: - data = request.data - - return SearchRideController(data, request, self.serializer_class).process() + data = { + "departure_datetime": depart, + "days_before": daysbefore, + "days_after": daysafter, + "start_location_place_id": start, + "end_location_place_id": end, + "radius": radius + } + return SearchRideController(data, self.serializer_class).process() From 485d9c269f3e67afada0d2f6a58546e7177631c1 Mon Sep 17 00:00:00 2001 From: Patricia Huang Date: Wed, 8 Nov 2023 01:04:52 -0500 Subject: [PATCH 2/2] define permission class --- src/ride/views.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ride/views.py b/src/ride/views.py index 5552662..9d8688a 100644 --- a/src/ride/views.py +++ b/src/ride/views.py @@ -54,6 +54,7 @@ def post(self, request, id): class SearchView(generics.GenericAPIView): serializer_class = RideSerializer + permission_classes = api_settings.CONSUMER_PERMISSIONS lookup_fields = ['depart', 'daysbefore', 'daysafter', 'start', 'end', 'radius'] def get(self, request, depart, daysbefore, daysafter, start, end, radius):