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
« 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
4from worblehat.models import BookcaseItem
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()
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()
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 )
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 )
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 )