43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
# Entity: Book
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, status
|
|
from sqlalchemy.orm import Session
|
|
from app.api.db.database import get_db
|
|
|
|
router = APIRouter()
|
|
|
|
@router.get("/api/v1/books")
|
|
async def get_books(
|
|
author: str = None,
|
|
title: str = None,
|
|
db: Session = Depends(get_db)
|
|
):
|
|
"""
|
|
Get all books with optional filtering by author and title.
|
|
"""
|
|
query = db.query(Book)
|
|
|
|
if author:
|
|
query = query.filter(Book.author.ilike(f"%{author}%"))
|
|
|
|
if title:
|
|
query = query.filter(Book.title.ilike(f"%{title}%"))
|
|
|
|
books = query.all()
|
|
|
|
return [
|
|
{
|
|
"id": book.id,
|
|
"title": book.title,
|
|
"author": book.author,
|
|
# Add other book fields as needed
|
|
}
|
|
for book in books
|
|
]
|
|
```
|
|
|
|
In this implementation, the `get_books` function accepts two optional query parameters: `author` and `title`. It then constructs a SQLAlchemy query on the `Book` model and applies filters based on the provided parameters using the `ilike` operator for case-insensitive pattern matching.
|
|
|
|
The filtered query is executed, and the results are returned as a list of dictionaries containing the book details. You can adjust the fields included in the dictionary based on your requirements.
|
|
|
|
Note that this implementation assumes the existence of a `Book` model and the necessary database setup with SQLAlchemy. You'll need to import the `Book` model and any required schemas in the actual implementation. |