Skip to content

Commit e515fce

Browse files
committed
Fix Caching layer for CourseListSearch
1 parent 54ae238 commit e515fce

File tree

3 files changed

+30
-41
lines changed

3 files changed

+30
-41
lines changed

backend/courses/views.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -251,22 +251,24 @@ def get_serializer_context(self):
251251

252252
return context
253253

254+
http_method_names = ["get", "post"]
254255
search_fields = ("full_code", "title", "sections__instructors__name")
256+
filter_backends = [TypedCourseSearchBackend, CourseSearchAdvancedFilterBackend]
255257

256-
def get(self, request, *args, **kwargs):
257-
queryset = super().get_queryset()
258-
queryset = TypedCourseSearchBackend().filter_queryset(request, queryset, self)
258+
def get_filter_backends(self):
259+
if self.request.method == "GET":
260+
return [TypedCourseSearchBackend]
261+
262+
if self.request.method == "POST":
263+
return [TypedCourseSearchBackend, CourseSearchAdvancedFilterBackend]
259264

260-
serializer = self.get_serializer(queryset, many=True)
261-
return Response(serializer.data)
265+
return super().get_filter_backends()
262266

263267
def post(self, request, *args, **kwargs):
264-
queryset = super().get_queryset()
265-
queryset = TypedCourseSearchBackend().filter_queryset(request, queryset, self)
266-
queryset = CourseSearchAdvancedFilterBackend().filter_queryset(request, queryset, self)
268+
return self.list(request, *args, **kwargs)
267269

268-
serializer = self.get_serializer(queryset, many=True)
269-
return Response(serializer.data)
270+
def get(self, request, *args, **kwargs):
271+
return self.list(request, *args, **kwargs)
270272

271273

272274
class CourseDetail(generics.RetrieveAPIView, BaseCourseMixin):

backend/degree/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def create(self, request, *args, **kwargs):
9191
if DegreePlan.objects.filter(name=name, person=self.request.user).exists():
9292
return Response(
9393
{"warning": f"A degree plan with name {name} already exists."},
94-
status=status.HTTP_409_CONFLICT
94+
status=status.HTTP_409_CONFLICT,
9595
)
9696
new_degree_plan = DegreePlan(name=name, person=self.request.user)
9797
new_degree_plan.save()

frontend/plan/actions/index.js

Lines changed: 17 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -274,42 +274,29 @@ export function fetchCourseSearch(filterData) {
274274
};
275275
}
276276

277-
const advancedCourseSearch = (_, searchData) =>
278-
doAPIRequest(`/base/current/search/courses/?search=${searchData.query}`, {
279-
method: "POST",
280-
credentials: "include",
281-
mode: "same-origin",
282-
headers: {
283-
Accept: "application/json",
284-
"Content-Type": "application/json",
285-
"X-CSRFToken": getCsrf(),
286-
},
287-
body: JSON.stringify(searchData.filters),
288-
});
277+
function advancedCourseSearch(_, searchData) {
278+
const empty = searchData.filters.children.length === 0;
279+
return doAPIRequest(
280+
`/base/current/search/courses/?search=${searchData.query}`,
281+
{
282+
method: empty ? "GET" : "POST",
283+
credentials: "include",
284+
mode: "same-origin",
285+
headers: {
286+
Accept: "application/json",
287+
"Content-Type": "application/json",
288+
"X-CSRFToken": getCsrf(),
289+
},
290+
body: empty ? null : JSON.stringify(searchData.filters),
291+
}
292+
);
293+
}
289294

290295
const debouncedAdvancedCourseSearch = AwesomeDebouncePromise(
291296
advancedCourseSearch,
292297
500
293298
);
294299

295-
export function fetchAdvancedCourseSearch(searchData) {
296-
return (dispatch) => {
297-
dispatch(updateSearchRequest());
298-
debouncedAdvancedCourseSearch(dispatch, searchData)
299-
.then((res) => res.json())
300-
.then((res) => res.filter((course) => course.num_sections > 0))
301-
.then((res) =>
302-
batch(() => {
303-
dispatch(updateScrollPos());
304-
dispatch(updateSearch(res));
305-
if (res.length === 1)
306-
dispatch(fetchCourseDetails(res[0].id));
307-
})
308-
)
309-
.catch((error) => dispatch(courseSearchError(error)));
310-
};
311-
}
312-
313300
export function updateSearchText(s) {
314301
return {
315302
type: UPDATE_SEARCH_TEXT,

0 commit comments

Comments
 (0)