Skip to content

Commit d29b588

Browse files
committed
Refactor course router to use SQLAlchemy
1 parent d058712 commit d29b588

File tree

1 file changed

+34
-28
lines changed

1 file changed

+34
-28
lines changed

app/routers/course.py

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
11
from enum import Enum
22

33
from fastapi import APIRouter
4-
from sqlmodel import and_, desc, distinct, func, or_, select
5-
from sqlmodel.sql.expression import Select, SelectOfScalar
4+
from sqlalchemy import and_, desc, distinct, func, or_, select
5+
from sqlalchemy.sql import Select
66

77
from app import SessionDep
8-
from app.db_models.course import Course
9-
from app.db_models.course_attribute import Course_Attribute
10-
from app.db_models.course_seats import Course_Seats
8+
from carpi_data_model.models import Course, Course_Attribute, Course_Offering
119

1210

1311
class CourseFilter(str, Enum):
14-
departments = "departments"
12+
subjects = "subjects"
1513
attributes = "attributes"
1614
semesters = "semesters"
1715

@@ -29,21 +27,25 @@ def search_course_query(
2927
dept_filter_regex: str,
3028
attr_filter_regex: str,
3129
sem_filter_regex: str,
32-
) -> Select | SelectOfScalar:
30+
) -> Select:
3331
return (
3432
select(
35-
Course.dept,
33+
Course.subj_code,
3634
Course.code_num,
3735
Course.title,
3836
Course.desc_text,
3937
Course.credit_min,
4038
Course.credit_max,
4139
func.group_concat(
42-
distinct(func.concat(Course_Seats.semester, " ", Course_Seats.sem_year))
40+
distinct(
41+
func.concat(Course_Offering.semester, " ", Course_Offering.sem_year)
42+
)
4343
).label("sem_list"),
44-
func.group_concat(distinct(Course_Attribute.attr)).label("attr_list"),
44+
func.group_concat(distinct(Course_Attribute.attr_code)).label("attr_list"),
4545
func.regexp_like(
46-
func.concat(Course.dept, " ", Course.code_num), search_code_regex, "i"
46+
func.concat(Course.subj_code, " ", Course.code_num),
47+
search_code_regex,
48+
"i",
4749
).label("code_match"),
4850
func.regexp_like(Course.title, search_full_regex, "i").label(
4951
"title_exact_match"
@@ -60,22 +62,22 @@ def search_course_query(
6062
),
6163
)
6264
.join(
63-
Course_Seats,
65+
Course_Offering,
6466
and_(
65-
Course.dept == Course_Seats.dept,
66-
Course.code_num == Course_Seats.code_num,
67+
Course.subj_code == Course_Offering.subj_code,
68+
Course.code_num == Course_Offering.code_num,
6769
),
6870
)
6971
.outerjoin(
7072
Course_Attribute,
7173
and_(
72-
Course.dept == Course_Attribute.dept,
74+
Course.subj_code == Course_Attribute.subj_code,
7375
Course.code_num == Course_Attribute.code_num,
7476
),
7577
)
76-
.where(func.regexp_like(Course.dept, dept_filter_regex, "i"))
78+
.where(func.regexp_like(Course.subj_code, dept_filter_regex, "i"))
7779
.group_by(
78-
Course.dept,
80+
Course.subj_code,
7981
Course.code_num,
8082
Course.title,
8183
Course.desc_text,
@@ -85,7 +87,7 @@ def search_course_query(
8587
.having(
8688
or_(
8789
func.regexp_like(
88-
func.concat(Course.dept, " ", Course.code_num),
90+
func.concat(Course.subj_code, " ", Course.code_num),
8991
search_code_regex,
9092
"i",
9193
),
@@ -96,14 +98,18 @@ def search_course_query(
9698
func.regexp_like(Course.title, search_abbrev_regex, "i"),
9799
),
98100
func.regexp_like(
99-
func.ifnull(func.group_concat(distinct(Course_Attribute.attr)), ""),
101+
func.ifnull(
102+
func.group_concat(distinct(Course_Attribute.attr_code)), ""
103+
),
100104
attr_filter_regex,
101105
"i",
102106
),
103107
func.regexp_like(
104108
func.group_concat(
105109
distinct(
106-
func.concat(Course_Seats.semester, " ", Course_Seats.sem_year)
110+
func.concat(
111+
Course_Offering.semester, " ", Course_Offering.sem_year
112+
)
107113
)
108114
),
109115
sem_filter_regex,
@@ -113,7 +119,7 @@ def search_course_query(
113119
.order_by(
114120
desc(
115121
func.regexp_like(
116-
func.concat(Course.dept, " ", Course.code_num),
122+
func.concat(Course.subj_code, " ", Course.code_num),
117123
search_code_regex,
118124
"i",
119125
)
@@ -124,7 +130,7 @@ def search_course_query(
124130
desc(func.regexp_like(Course.title, search_acronym_regex, "i")),
125131
desc(func.regexp_like(Course.title, search_abbrev_regex, "i")),
126132
Course.code_num,
127-
Course.dept,
133+
Course.subj_code,
128134
)
129135
)
130136

@@ -189,7 +195,7 @@ def search_course(
189195
regex_abbrev = regex_abbrev[:-3]
190196
else:
191197
regex_abbrev = "a^"
192-
results = session.exec(
198+
results = session.execute(
193199
search_course_query(
194200
regex_code,
195201
regex_full,
@@ -208,12 +214,12 @@ def search_course(
208214
@router.get("/filter/values/{filter}")
209215
def get_filter_values(session: SessionDep, filter: CourseFilter) -> list[str]:
210216
column = None
211-
if filter is CourseFilter.departments:
212-
column = Course.dept
217+
if filter is CourseFilter.subjects:
218+
column = Course.subj_code
213219
elif filter is CourseFilter.attributes:
214-
column = Course_Attribute.attr
220+
column = Course_Attribute.attr_code
215221
elif filter is CourseFilter.semesters:
216-
column = Course_Seats.semester
222+
column = Course_Offering.semester
217223
else:
218224
return None
219-
return session.exec(select(column).distinct()).all()
225+
return session.execute(select(column).distinct()).all()

0 commit comments

Comments
 (0)