From 972f9007569a08d84a0aa6958000ce4b0647bf8a Mon Sep 17 00:00:00 2001 From: Raymond Chen <42894676+ramonechen@users.noreply.github.com> Date: Tue, 18 Nov 2025 17:04:59 -0500 Subject: [PATCH 1/2] Update filter values endpoint to return mappings The /filter/values/{filter} endpoint now returns a dictionary mapping codes to titles for subjects and attributes, and a capitalized dictionary for semesters. This improves the API response structure for frontend consumption. --- app/routers/course.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/app/routers/course.py b/app/routers/course.py index 090cb38..40cb5b7 100644 --- a/app/routers/course.py +++ b/app/routers/course.py @@ -220,14 +220,20 @@ def search_course( @router.get("/filter/values/{filter}") -def get_filter_values(session: SessionDep, filter: CourseFilter) -> list[str]: - column = None +def get_filter_values(session: SessionDep, filter: CourseFilter) -> dict[str, str]: + code_col, title_col = None, None if filter is CourseFilter.subjects: - column = Subject.subj_code + code_col = Subject.subj_code + title_col = Subject.title elif filter is CourseFilter.attributes: - column = Attribute.attr_code + code_col = Attribute.attr_code + title_col = Attribute.title elif filter is CourseFilter.semesters: - column = Course_Offering.semester + result_scalars = ( + session.execute(select(Course_Offering.semester).distinct()).scalars().all() + ) + return {sem: sem.capitalize() for sem in result_scalars} else: return None - return session.execute(select(column).distinct()).scalars().all() + result_mappings = session.execute(select(code_col, title_col)).mappings().all() + return {row[code_col]: row[title_col] for row in result_mappings} From 0298751b198dbad51f9ef2dfcc40532bfe5ab0ec Mon Sep 17 00:00:00 2001 From: Raymond Chen <42894676+ramonechen@users.noreply.github.com> Date: Tue, 18 Nov 2025 17:13:39 -0500 Subject: [PATCH 2/2] Return empty dict instead of None in filters endpoint --- app/routers/course.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/routers/course.py b/app/routers/course.py index 40cb5b7..390b0bc 100644 --- a/app/routers/course.py +++ b/app/routers/course.py @@ -234,6 +234,6 @@ def get_filter_values(session: SessionDep, filter: CourseFilter) -> dict[str, st ) return {sem: sem.capitalize() for sem in result_scalars} else: - return None + return {} result_mappings = session.execute(select(code_col, title_col)).mappings().all() return {row[code_col]: row[title_col] for row in result_mappings}