diff --git a/src/api/urls.py b/src/api/urls.py index 96a5c9a..0e4765a 100644 --- a/src/api/urls.py +++ b/src/api/urls.py @@ -17,7 +17,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 4e4deee..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_last_week = departure_datetime_object - datetime.timedelta(days=7) - departure_next_week = departure_datetime_object + datetime.timedelta(days=7) + 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_last_week, - departure_datetime__lte=departure_next_week, + 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 e962580..4d2a152 100644 --- a/src/ride/views.py +++ b/src/ride/views.py @@ -63,12 +63,16 @@ def delete(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()