Add GET endpoint for api/v1/books
This commit is contained in:
parent
e5e268c85b
commit
0dcdec6156
43
endpoints/books.get.py
Normal file
43
endpoints/books.get.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# 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.
|
Loading…
x
Reference in New Issue
Block a user