diff --git a/endpoints/books.post.py b/endpoints/books.post.py new file mode 100644 index 0000000..cfeb417 --- /dev/null +++ b/endpoints/books.post.py @@ -0,0 +1,40 @@ +# 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.post("/books", status_code=status.HTTP_201_CREATED, response_model=BookResponse) +async def create_book(book_data: BookCreate, db: Session = Depends(get_db)): + """ + Create a new book in the database. + + Parameters: + - book_data: BookCreate (Pydantic model with book data) + + Returns: + - BookResponse (Pydantic model with book data and id) + """ + new_book = Book(**book_data.dict()) + db.add(new_book) + db.commit() + db.refresh(new_book) + return new_book +``` + +This endpoint defines a `POST` route at `/books` using the `@router.post` decorator. It takes a `book_data` parameter of type `BookCreate` (a Pydantic model representing the data needed to create a new book). The `db` parameter is a SQLAlchemy database session obtained using the `get_db` dependency. + +The endpoint function `create_book` does the following: + +1. Creates a new `Book` model instance using the data from `book_data`. +2. Adds the new book instance to the database session. +3. Commits the changes to the database. +4. Refreshes the `new_book` instance to get the generated ID. +5. Returns the `new_book` instance as a `BookResponse` Pydantic model. + +The response status code is set to `HTTP_201_CREATED` to indicate successful creation of a new resource. The `response_model` parameter specifies that the response should be serialized using the `BookResponse` Pydantic model. + +Note that you will need to define the `Book`, `BookCreate`, and `BookResponse` models (or import them from the appropriate module) for this code to work correctly. \ No newline at end of file