Coverage for dibbler / queries / search_user.py: 100%

12 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-12 18:53 +0000

1from sqlalchemy import or_, select 

2from sqlalchemy.orm import Session 

3 

4from dibbler.models import User 

5 

6 

7def search_user( 

8 string: str, 

9 sql_session: Session, 

10) -> User | list[User]: 

11 if not string: 

12 raise ValueError("Search string cannot be empty.") 

13 

14 string = string.lower() 

15 

16 exact_match = sql_session.scalars( 

17 select(User).where( 

18 or_( 

19 User.name == string, 

20 User.card == string, 

21 User.rfid == string, 

22 ) 

23 ) 

24 ).first() 

25 

26 if exact_match: 

27 return exact_match 

28 

29 user_list = sql_session.scalars( 

30 select(User).where( 

31 or_( 

32 User.name.ilike(f"%{string}%"), 

33 User.card.ilike(f"%{string}%"), 

34 User.rfid.ilike(f"%{string}%"), 

35 ) 

36 ) 

37 ).all() 

38 

39 return list(user_list)