11from enum import Enum
22
33from 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
77from 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
1311class 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}" )
209215def 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