Coverage for src/worblehat/queries/bookcase_shelf.py: 100%
14 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 Bookcase, BookcaseShelf
7def find_bookcase_shelf(
8 sql_session: Session,
9 bookcase: Bookcase,
10 column: int,
11 row: int,
12) -> BookcaseShelf | None:
13 return sql_session.scalars(
14 select(BookcaseShelf).where(
15 BookcaseShelf.bookcase == bookcase,
16 BookcaseShelf.column == column,
17 BookcaseShelf.row == row,
18 ),
19 ).one_or_none()
22def list_bookcase_shelfs_ordered(sql_session: Session) -> list[BookcaseShelf]:
23 return list(
24 sql_session.scalars(
25 select(BookcaseShelf)
26 .join(Bookcase)
27 .order_by(
28 Bookcase.name,
29 BookcaseShelf.column,
30 BookcaseShelf.row,
31 ),
32 ).all(),
33 )
36def list_bookcase_shelf_positions(
37 sql_session: Session,
38 bookcase: Bookcase,
39 column: int | None = None,
40 row: int | None = None,
41) -> list[tuple[int, int]]:
42 query = select(BookcaseShelf.row, BookcaseShelf.column).where(
43 BookcaseShelf.bookcase == bookcase,
44 )
45 if column is not None:
46 query = query.where(BookcaseShelf.column == column)
47 if row is not None:
48 query = query.where(BookcaseShelf.row == row)
49 return [tuple(r) for r in sql_session.execute(query)]