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

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 

6 

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) 

17 

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) 

30 

31 # Combine into query 

32 searchResults = User.select().where(searchWhere, userWhere) 

33 

34 return { user.username : model_to_dict(user) for user in searchResults }