Add GET endpoint for books
This commit is contained in:
parent
633cd99a8c
commit
9a45e804e0
@ -3,10 +3,11 @@
|
||||
from fastapi import APIRouter, Depends, HTTPException, status
|
||||
from sqlalchemy.orm import Session
|
||||
from app.api.db.database import get_db
|
||||
# You'll need to add correct model and schema imports
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
@router.get("/api/v1/books")
|
||||
@router.get("/books")
|
||||
async def get_books(
|
||||
author: str = None,
|
||||
title: str = None,
|
||||
@ -14,30 +15,34 @@ async def get_books(
|
||||
):
|
||||
"""
|
||||
Get all books with optional filtering by author and title.
|
||||
|
||||
Args:
|
||||
author (str, optional): Filter by author name.
|
||||
title (str, optional): Filter by book title.
|
||||
db (Session, optional): Database session instance.
|
||||
|
||||
Returns:
|
||||
List[Book]: List of Book objects matching the filters.
|
||||
"""
|
||||
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
|
||||
]
|
||||
return 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.
|
||||
This endpoint implements the following:
|
||||
|
||||
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.
|
||||
1. It accepts two optional query parameters: `author` and `title`.
|
||||
2. It constructs a SQLAlchemy query on the `Book` model and applies filters based on the provided parameters.
|
||||
3. If the `author` parameter is provided, it filters the books by the author name using a case-insensitive `LIKE` query.
|
||||
4. If the `title` parameter is provided, it filters the books by the title using a case-insensitive `LIKE` query.
|
||||
5. It retrieves all the books matching the filters and returns them as a list.
|
||||
|
||||
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.
|
||||
Note that you'll need to import the `Book` model and any necessary schemas for the response. Also, you may need to adjust the return type annotation based on your schema definition.
|
Loading…
x
Reference in New Issue
Block a user