Add GET endpoint for books
This commit is contained in:
parent
ff663d7e95
commit
8982375f5e
@ -1,48 +0,0 @@
|
|||||||
# Entity: Book
|
|
||||||
|
|
||||||
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("/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.
|
|
||||||
|
|
||||||
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 books
|
|
||||||
```
|
|
||||||
|
|
||||||
This endpoint implements the following:
|
|
||||||
|
|
||||||
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 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