From ad85f1e6c84ea37d676e3fe472bda561ae86cca5 Mon Sep 17 00:00:00 2001 From: Raymond Chen <42894676+ramonechen@users.noreply.github.com> Date: Fri, 14 Nov 2025 17:43:11 -0500 Subject: [PATCH 1/2] Simplify semester grouping in course search query Updated the group_concat for semesters to only include distinct semester values, removing concatenation with year. This simplifies the 'sem_list' output in the course search query. Co-Authored-By: Jack Zgombic <69125339+jzgom067@users.noreply.github.com> --- app/routers/course.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/routers/course.py b/app/routers/course.py index 77adad4..cb97813 100644 --- a/app/routers/course.py +++ b/app/routers/course.py @@ -42,11 +42,7 @@ def search_course_query( Course.desc_text, Course.credit_min, Course.credit_max, - func.group_concat( - distinct( - func.concat(Course_Offering.semester, " ", Course_Offering.sem_year) - ) - ).label("sem_list"), + func.group_concat(distinct(Course_Offering.semester)).label("sem_list"), func.group_concat(distinct(Course_Attribute.attr_code)).label("attr_list"), func.regexp_like( func.concat(Course.subj_code, " ", Course.code_num), From 41ce2af0df900d8b061f3af137baea4b995525b2 Mon Sep 17 00:00:00 2001 From: Raymond Chen <42894676+ramonechen@users.noreply.github.com> Date: Fri, 14 Nov 2025 17:49:05 -0500 Subject: [PATCH 2/2] Array-ify semester and attributes in course search Co-Authored-By: Jack Zgombic <69125339+jzgom067@users.noreply.github.com> --- app/routers/course.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/routers/course.py b/app/routers/course.py index cb97813..090cb38 100644 --- a/app/routers/course.py +++ b/app/routers/course.py @@ -144,7 +144,7 @@ def search_course( deptFilters: str | None = None, attrFilters: str | None = None, semFilters: str | None = None, -) -> list[dict[str, str | int | None]]: +) -> list[dict[str, str | int | list[str]]]: # FastAPI does not support list query parameters dept_filters = deptFilters.split(",") if deptFilters else None attr_filters = attrFilters.split(",") if attrFilters else None @@ -210,7 +210,13 @@ def search_course( sem_filter_regex, ) ).all() - return [dict(row._mapping) for row in results] + results_dict = [dict(row._mapping) for row in results] + for course in results_dict: + course["sem_list"] = course["sem_list"].split(",") if course["sem_list"] else [] + course["attr_list"] = ( + course["attr_list"].split(",") if course["attr_list"] else [] + ) + return results_dict @router.get("/filter/values/{filter}")