Coverage for src/worblehat/queries/bookcase_item.py: 100%

13 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-09-25 22:25 +0000

1from sqlalchemy import select 

2from sqlalchemy.orm import Session 

3 

4from worblehat.models import BookcaseItem 

5 

6 

7def find_bookcase_item_by_isbn(sql_session: Session, isbn: str) -> BookcaseItem | None: 

8 return sql_session.scalars( 

9 select(BookcaseItem).where(BookcaseItem.isbn == isbn), 

10 ).one_or_none() 

11 

12 

13def find_bookcase_item_by_name(sql_session: Session, name: str) -> BookcaseItem | None: 

14 return sql_session.scalars( 

15 select(BookcaseItem).where(BookcaseItem.name == name), 

16 ).one_or_none() 

17 

18 

19def search_bookcase_items_by_title(sql_session: Session, text: str) -> list[BookcaseItem]: 

20 return list( 

21 sql_session.scalars( 

22 select(BookcaseItem).where(BookcaseItem.name.ilike(f"%{text}%")), 

23 ).all(), 

24 ) 

25 

26 

27def search_bookcase_item_owners(sql_session: Session, text: str) -> list[str]: 

28 return list( 

29 sql_session.scalars( 

30 select(BookcaseItem.owner).where(BookcaseItem.owner.ilike(f"%{text}%")).distinct(), 

31 ).all(), 

32 ) 

33 

34 

35def list_bookcase_items_by_owner(sql_session: Session, owner: str) -> list[BookcaseItem]: 

36 return list( 

37 sql_session.scalars( 

38 select(BookcaseItem).where(BookcaseItem.owner == owner), 

39 ).all(), 

40 )