Add helper functions for Book
This commit is contained in:
parent
edff293d0f
commit
20bf8b6dbd
78
helpers/book_helpers.py
Normal file
78
helpers/book_helpers.py
Normal 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
|
Loading…
x
Reference in New Issue
Block a user