From ecb997e5959e90c9fb92bb91fe010f1c38b4f39f Mon Sep 17 00:00:00 2001 From: Bulat Kurbanov Date: Wed, 1 Feb 2023 02:57:41 +0100 Subject: [PATCH] Add book base info endpoint --- fastapi_book_server/app/serializers/book.py | 5 +++++ fastapi_book_server/app/services/book.py | 6 ++++++ fastapi_book_server/app/views/book.py | 12 +++++++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/fastapi_book_server/app/serializers/book.py b/fastapi_book_server/app/serializers/book.py index b466a9b..f4d9845 100644 --- a/fastapi_book_server/app/serializers/book.py +++ b/fastapi_book_server/app/serializers/book.py @@ -34,6 +34,11 @@ class RemoteBook(Book): remote_id: int +class BookBaseInfo(BaseModel): + id: int + available_types: list[str] + + class BookDetail(RemoteBook): sequences: list[Sequence] genres: list[BookGenre] diff --git a/fastapi_book_server/app/services/book.py b/fastapi_book_server/app/services/book.py index 128f314..96c451a 100644 --- a/fastapi_book_server/app/services/book.py +++ b/fastapi_book_server/app/services/book.py @@ -30,6 +30,12 @@ class BookTGRMSearchService(TRGMSearchService): GET_OBJECT_IDS_QUERY = GET_OBJECT_IDS_QUERY +class BookBaseInfoFilterService(BaseFilterService): + MODEL_CLASS = BookDB + PREFETCH_RELATED = [] + SELECT_RELATED = [] + + class BookFilterService(BaseFilterService): MODEL_CLASS = BookDB PREFETCH_RELATED = ["source"] diff --git a/fastapi_book_server/app/views/book.py b/fastapi_book_server/app/views/book.py index 275fb6e..0bc75a8 100644 --- a/fastapi_book_server/app/views/book.py +++ b/fastapi_book_server/app/views/book.py @@ -7,9 +7,10 @@ from app.depends import check_token, get_allowed_langs from app.filters.book import get_book_filter from app.models import Book as BookDB from app.models import BookAnnotation as BookAnnotationDB -from app.serializers.book import Book, BookDetail, RemoteBook +from app.serializers.book import Book, BookBaseInfo, BookDetail, RemoteBook from app.serializers.book_annotation import BookAnnotation from app.services.book import ( + BookBaseInfoFilterService, BookFilterService, BookMeiliSearchService, GetRandomBookService, @@ -38,6 +39,15 @@ async def get_books( return await BookFilterService.get(book_filter, request.app.state.redis) +@book_router.get( + "/base/", response_model=CustomPage[BookBaseInfo], dependencies=[Depends(Params)] +) +async def get_base_books_info( + request: Request, book_filter: dict = Depends(get_book_filter) +): + return await BookBaseInfoFilterService.get(book_filter, request.app.state.redis) + + @book_router.get("/last", response_model=int) async def get_last_book_id(): book = await BookDB.objects.order_by("-id").first()