diff --git a/helpers/book_helpers.py b/helpers/book_helpers.py new file mode 100644 index 0000000..c618850 --- /dev/null +++ b/helpers/book_helpers.py @@ -0,0 +1,71 @@ +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 \ No newline at end of file