Coverage for app/logic/searchUsers.py: 96%
23 statements
« prev ^ index » next coverage.py v7.10.2, created at 2026-07-27 15:23 +0000
« prev ^ index » next coverage.py v7.10.2, created at 2026-07-27 15:23 +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 fullSearch = " ".join(splitSearch) + "%"
12 searchWhere = (User.firstName ** fullSearch | User.lastName ** fullSearch | User.username ** fullSearch)
13 for splitIndex in range(1, len(splitSearch)):
14 firstName = " ".join(splitSearch[:splitIndex]) + "%"
15 lastName = " ".join(splitSearch[splitIndex:]) + "%"
16 searchWhere |= (User.firstName ** firstName & User.lastName ** lastName)
18 if category == "instructor":
19 userWhere = (User.isFaculty | User.isStaff)
20 elif category == "admin":
21 userWhere = (User.isCeltsAdmin)
22 elif category == "studentstaff":
23 userWhere = (User.isCeltsStudentStaff)
24 elif category == "celtsLinkAdmin":
25 userWhere = (User.isFaculty | User.isStaff | User.isCeltsStudentStaff)
26 elif category == "all":
27 userWhere = (True)
28 else:
29 userWhere = (User.isStudent)
31 # Combine into query
32 searchResults = User.select().where(searchWhere, userWhere)
34 return { user.username : model_to_dict(user) for user in searchResults }