Coverage for app/logic/searchUsers.py: 95%
22 statements
« prev ^ index » next coverage.py v7.2.7, created at 2025-07-22 20:03 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2025-07-22 20:03 +0000
1from playhouse.shortcuts import model_to_dict
2from app.models.user import User
3def searchUsers(query, category=None):
4 '''
5 Search the User table based on the search query and category
7 MySQL LIKE is case insensitive
8 '''
9 # add wildcards to each piece of the query
10 splitSearch = query.strip().split()
11 firstName = splitSearch[0] + "%"
12 lastName = " ".join(splitSearch[1:]) +"%"
14 if len(splitSearch) == 1: # search for query in first OR last name
15 searchWhere = (User.firstName ** firstName | User.lastName ** firstName | User.username ** splitSearch)
16 else: # search for first AND last name
17 searchWhere = (User.firstName ** firstName & User.lastName ** lastName)
19 if category == "instructor":
20 userWhere = (User.isFaculty | User.isStaff)
21 elif category == "admin":
22 userWhere = (User.isCeltsAdmin)
23 elif category == "studentstaff":
24 userWhere = (User.isCeltsStudentStaff)
25 elif category == "celtsLinkAdmin":
26 userWhere = (User.isFaculty | User.isStaff | User.isCeltsStudentStaff)
27 elif category == "all":
28 userWhere = (True)
29 else:
30 userWhere = (User.isStudent)
32 # Combine into query
33 searchResults = User.select().where(searchWhere, userWhere)
35 return { user.username : model_to_dict(user) for user in searchResults }