11from fastapi import APIRouter , Body , Request , Response , HTTPException , status
22from fastapi .encoders import jsonable_encoder
3+ from typing import List
34
45from models import Book , BookUpdate
56
67router = APIRouter ()
78
8- @router .post ("/" , response_description = "Create a new book" , status_code = status .HTTP_201_CREATED )
9+ @router .post ("/" , response_description = "Create a new book" , status_code = status .HTTP_201_CREATED , response_model = Book )
910def create_book (request : Request , book : Book = Body (...)):
1011 book = jsonable_encoder (book )
1112 new_book = request .app .database ["books" ].insert_one (book )
@@ -16,20 +17,20 @@ def create_book(request: Request, book: Book = Body(...)):
1617 return created_book
1718
1819
19- @router .get ("/" , response_description = "List all books" )
20+ @router .get ("/" , response_description = "List all books" , response_model = List [ Book ] )
2021def list_books (request : Request ):
2122 books = list (request .app .database ["books" ].find (limit = 100 ))
2223 return books
2324
24- @router .get ("/{id}" , response_description = "Get a single book by id" )
25+ @router .get ("/{id}" , response_description = "Get a single book by id" , response_model = Book )
2526def find_book (id : str , request : Request ):
2627 if (book := request .app .database ["books" ].find_one ({"_id" : id })) is not None :
2728 return book
2829
2930 raise HTTPException (status_code = status .HTTP_404_NOT_FOUND , detail = f"Book with ID { id } not found" )
3031
3132
32- @router .put ("/{id}" , response_description = "Update a book" )
33+ @router .put ("/{id}" , response_description = "Update a book" , response_model = Book )
3334def update_book (id : str , request : Request , book : BookUpdate = Body (...)):
3435 book = {k : v for k , v in book .dict ().items () if v is not None }
3536
0 commit comments