diff --git a/labconnect/main/opportunity_routes.py b/labconnect/main/opportunity_routes.py index 8cd59f31..af3ecfb4 100644 --- a/labconnect/main/opportunity_routes.py +++ b/labconnect/main/opportunity_routes.py @@ -11,6 +11,7 @@ RecommendsCourses, RecommendsMajors, User, + Courses, ) @@ -605,6 +606,41 @@ def getLabManagerOpportunityCards(rcs_id: str): # return cards +@main_blueprint.get("/searchCourses/") +def searchCourses(query: str): + # Perform a search on Courses table by code and name using ILIKE for exact partial matches + stmt = ( + db.select(Courses) + .distinct() + .where( + (Courses.code.ilike(f"%{query}%")) + | ( + User.last_name.ilike( + f"%{query}%" + ) # Case-insensitive partial match on course code + ) + | ( + Courses.name.ilike( + f"%{query}%" + ) # Case-insensitive partial match on course name + ) + ) + ) + + results = db.session.execute(stmt).scalars().all() + + # Format results as JSON + courses = [ + { + "code": course.code, + "name": course.name, + } + for course in results + ] + + return {"courses": courses}, 200 + + # functions to create/edit/delete opportunities @main_blueprint.post("/createOpportunity") @jwt_required()