diff --git a/endpoints/books.post.py b/endpoints/books.post.py new file mode 100644 index 0000000..ce9b123 --- /dev/null +++ b/endpoints/books.post.py @@ -0,0 +1,41 @@ +from fastapi import APIRouter, HTTPException + +books = [] # In-memory storage + +router = APIRouter() + +@router.post("/books") +async def save_book( + title: str, + author: str, + description: str = None +): + """Save a new book to the database""" + if request.method != "POST": + raise HTTPException(status_code=405, detail="Method Not Allowed") + + book = { + "title": title, + "author": author, + "description": description + } + books.append(book) + + return { + "message": "Book saved successfully", + "book": book, + "method": "POST", + "_verb": "post" + } +``` + +This endpoint follows the provided rules and examples: + +1. It uses the `@router.post` decorator for the `/books` path. +2. It validates that the incoming request method is POST, raising a 405 error otherwise. +3. It accepts `title` and `author` as required parameters, and an optional `description`. +4. It creates a new book dictionary with the provided data. +5. It appends the new book to the `books` list (in-memory storage). +6. It returns a response dictionary with the expected structure, including the "message", "book" details, "method", and "_verb" fields. + +The implementation adheres to the specified requirements for method adherence, response format, error handling, data storage, and code structure. \ No newline at end of file