users.py 781 B

1234567891011121314151617181920212223242526
  1. from __future__ import annotations
  2. from sqlalchemy import select, Select, or_, and_
  3. from flexmeasures.data.models.user import User as UserModel, Account
  4. def query_users_by_search_terms(
  5. search_terms: list[str] | None,
  6. filter_statement: bool = True,
  7. ) -> Select:
  8. select_statement = select(UserModel)
  9. if search_terms is not None:
  10. filter_statement = filter_statement & and_(
  11. *(
  12. or_(
  13. UserModel.email.ilike(f"%{term}%"),
  14. UserModel.username.ilike(f"%{term}%"),
  15. UserModel.account.has(Account.name.ilike(f"%{term}%")),
  16. )
  17. for term in search_terms
  18. )
  19. )
  20. query = select_statement.where(filter_statement)
  21. return query