from typing import Optional from sqlalchemy.orm import Session from models.book import Book from schemas.book import BookCreate def create_book(db: Session, book: BookCreate) -> Optional[Book]: """ Create a new book in the database. Args: db (Session): SQLAlchemy database session. book (BookCreate): Pydantic model containing book data. Returns: Optional[Book]: The created book object, or None if creation failed. """ try: db_book = Book( title=book.title, author=book.author, description=book.description, page_count=book.page_count, genre=book.genre, publisher_id=book.publisher_id ) db.add(db_book) db.commit() db.refresh(db_book) return db_book except Exception as e: db.rollback() print(f"Error creating book: {e}") return None def get_book_by_id(db: Session, book_id: str) -> Optional[Book]: """ Get a book by its ID from the database. Args: db (Session): SQLAlchemy database session. book_id (str): UUID of the book. Returns: Optional[Book]: The book object if found, or None if not found. """ return db.query(Book).filter(Book.id == book_id).first() def get_book_by_title(db: Session, title: str) -> Optional[Book]: """ Get a book by its title from the database. Args: db (Session): SQLAlchemy database session. title (str): Title of the book. Returns: Optional[Book]: The book object if found, or None if not found. """ return db.query(Book).filter(Book.title == title).first() def validate_page_count(page_count: int) -> bool: """ Validate the page count for a book. Args: page_count (int): Number of pages in the book. Returns: bool: True if the page count is valid (greater than 0), False otherwise. """ return page_count > 0