From 21de16ede7a345f1281a5bcd7d400504129f4f76 Mon Sep 17 00:00:00 2001 From: Bulat Kurbanov Date: Fri, 8 Apr 2022 12:34:44 +0300 Subject: [PATCH] Add genres to detail book --- fastapi_book_server/app/serializers/book.py | 8 +++++++- fastapi_book_server/app/views/book.py | 10 ++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/fastapi_book_server/app/serializers/book.py b/fastapi_book_server/app/serializers/book.py index 0e2adbe..57cfaaf 100644 --- a/fastapi_book_server/app/serializers/book.py +++ b/fastapi_book_server/app/serializers/book.py @@ -3,8 +3,8 @@ from datetime import date from pydantic import BaseModel from app.serializers.author import Author -from app.serializers.sequence import Sequence from app.serializers.orjson_config import ORJSONConfig +from app.serializers.sequence import Sequence class BookSource(BaseModel): @@ -12,6 +12,11 @@ class BookSource(BaseModel): name: str +class BookGenre(BaseModel): + id: int + description: str + + class Book(BaseModel): id: int title: str @@ -34,6 +39,7 @@ class RemoteBook(Book): class BookDetail(RemoteBook): sequences: list[Sequence] + genres: list[BookGenre] is_deleted: bool diff --git a/fastapi_book_server/app/views/book.py b/fastapi_book_server/app/views/book.py index ae2f9dd..defdfcd 100644 --- a/fastapi_book_server/app/views/book.py +++ b/fastapi_book_server/app/views/book.py @@ -36,6 +36,8 @@ book_router = APIRouter( PREFETCH_RELATED_FIELDS = ["source"] SELECT_RELATED_FIELDS = ["authors", "translators", "annotations"] +DETAIL_SELECT_RELATED_FIELDS = ["sequences", "genres"] + @book_router.get( "/", response_model=CustomPage[RemoteBook], dependencies=[Depends(Params)] @@ -68,7 +70,9 @@ async def get_random_book( ) book = ( - await BookDB.objects.select_related(SELECT_RELATED_FIELDS + ["sequences"]) + await BookDB.objects.select_related( + SELECT_RELATED_FIELDS + DETAIL_SELECT_RELATED_FIELDS + ) .prefetch_related(PREFETCH_RELATED_FIELDS) .get(id=book_id) ) @@ -79,7 +83,9 @@ async def get_random_book( @book_router.get("/{id}", response_model=BookDetail) async def get_book(id: int): book = ( - await BookDB.objects.select_related(SELECT_RELATED_FIELDS + ["sequences"]) + await BookDB.objects.select_related( + SELECT_RELATED_FIELDS + DETAIL_SELECT_RELATED_FIELDS + ) .prefetch_related(PREFETCH_RELATED_FIELDS) .get_or_none(id=id) )