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
« 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
4from dibbler.models import User
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.")
14 string = string.lower()
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()
26 if exact_match:
27 return exact_match
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()
39 return list(user_list)