Add helper functions for Book

This commit is contained in:
Backend IM Bot 2025-03-26 22:56:16 +01:00
parent edff293d0f
commit 20bf8b6dbd

78
helpers/book_helpers.py Normal file
View File

@ -0,0 +1,78 @@
from typing import Optional
from datetime import datetime
import re
from pydantic import BaseModel, validator
class Book(BaseModel):
title: str
author: str
description: Optional[str] = None
page_count: int
published_date: datetime
isbn: str
@validator('isbn')
def validate_isbn(cls, isbn):
"""
Validate the ISBN format.
"""
pattern = r'^[\d-]+$'
if not re.match(pattern, isbn):
raise ValueError('Invalid ISBN format')
return isbn
def create_book(db, book_data):
"""
Create a new book in the database.
Args:
db: Database session
book_data: Book data to create
Returns:
Book object if created successfully, None otherwise
"""
try:
book = Book(**book_data.dict())
except ValueError as e:
return None
db_book = db.query(Book).filter(Book.isbn == book.isbn).first()
if db_book:
return None
db.add(book)
db.commit()
db.refresh(book)
return book
def get_book_by_isbn(db, isbn):
"""
Get a book by its ISBN.
Args:
db: Database session
isbn: ISBN to search for
Returns:
Book object if found, None otherwise
"""
return db.query(Book).filter(Book.isbn == isbn).first()
def search_books(db, query):
"""
Search for books based on a query string.
Args:
db: Database session
query: Search query string
Returns:
List of Book objects matching the query
"""
books = db.query(Book).filter(
Book.title.ilike(f'%{query}%') |
Book.author.ilike(f'%{query}%') |
Book.description.ilike(f'%{query}%')
).all()
return books