from fastapi import APIRouter, Depends, HTTPException from app.models import Book, BookStats, BookStatusUpdate, Status from app.store import BookStore, get_store router = APIRouter() @router.get("/api/books", response_model=list[Book]) def list_books( status: Status | None = None, store: BookStore = Depends(get_store) ) -> list[Book]: return store.list_books(status) @router.patch("/api/books/{book_id}", response_model=Book) def update_book_status( book_id: int, update: BookStatusUpdate, store: BookStore = Depends(get_store) ) -> Book: book = store.update_status(book_id, update.status) if book is None: raise HTTPException(status_code=404, detail="Book not found") return book @router.get("/api/stats", response_model=BookStats) def stats(store: BookStore = Depends(get_store)) -> BookStats: return store.counts()