78 lines
2.3 KiB
Python
78 lines
2.3 KiB
Python
from typing import List
|
|
from sqlalchemy.orm import Session
|
|
from models.book import Book
|
|
from schemas.book import BookSchema
|
|
|
|
def get_all_books(db: Session) -> List[BookSchema]:
|
|
"""
|
|
Retrieve all books from the database.
|
|
|
|
Args:
|
|
db (Session): SQLAlchemy database session.
|
|
|
|
Returns:
|
|
List[BookSchema]: List of book schemas.
|
|
"""
|
|
books = db.query(Book).all()
|
|
return [BookSchema.from_orm(book) for book in books]
|
|
|
|
def get_book_by_id(db: Session, book_id: str) -> BookSchema:
|
|
"""
|
|
Retrieve a book by its ID from the database.
|
|
|
|
Args:
|
|
db (Session): SQLAlchemy database session.
|
|
book_id (str): ID of the book to retrieve.
|
|
|
|
Returns:
|
|
BookSchema: Book schema if found, None otherwise.
|
|
"""
|
|
book = db.query(Book).filter(Book.id == book_id).first()
|
|
return BookSchema.from_orm(book) if book else None
|
|
|
|
def get_books_by_author(db: Session, author: str) -> List[BookSchema]:
|
|
"""
|
|
Retrieve books by author from the database.
|
|
|
|
Args:
|
|
db (Session): SQLAlchemy database session.
|
|
author (str): Author name to search for.
|
|
|
|
Returns:
|
|
List[BookSchema]: List of book schemas for the given author.
|
|
"""
|
|
books = db.query(Book).filter(Book.author == author).all()
|
|
return [BookSchema.from_orm(book) for book in books]
|
|
|
|
def get_books_by_isbn(db: Session, isbn: str) -> List[BookSchema]:
|
|
"""
|
|
Retrieve books by ISBN from the database.
|
|
|
|
Args:
|
|
db (Session): SQLAlchemy database session.
|
|
isbn (str): ISBN to search for.
|
|
|
|
Returns:
|
|
List[BookSchema]: List of book schemas for the given ISBN.
|
|
"""
|
|
books = db.query(Book).filter(Book.isbn == isbn).all()
|
|
return [BookSchema.from_orm(book) for book in books]
|
|
|
|
def search_books(db: Session, query: str) -> List[BookSchema]:
|
|
"""
|
|
Search for books based on a query string.
|
|
|
|
Args:
|
|
db (Session): SQLAlchemy database session.
|
|
query (str): Search query string.
|
|
|
|
Returns:
|
|
List[BookSchema]: List of book schemas matching the search query.
|
|
"""
|
|
books = db.query(Book).filter(
|
|
Book.title.ilike(f"%{query}%") |
|
|
Book.author.ilike(f"%{query}%") |
|
|
Book.description.ilike(f"%{query}%") |
|
|
Book.isbn.ilike(f"%{query}%")
|
|
).all()
|
|
return [BookSchema.from_orm(book) for book in books] |