From 52725ae126d481e76293c9f8ed8e2153e69b86c3 Mon Sep 17 00:00:00 2001 From: Bulat Kurbanov Date: Tue, 6 Jun 2023 20:32:36 +0200 Subject: [PATCH] Update books by sequence handler --- fastapi_book_server/app/serializers/sequence.py | 5 +++++ fastapi_book_server/app/views/sequence.py | 16 +++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/fastapi_book_server/app/serializers/sequence.py b/fastapi_book_server/app/serializers/sequence.py index c5948b3..f8f7e41 100644 --- a/fastapi_book_server/app/serializers/sequence.py +++ b/fastapi_book_server/app/serializers/sequence.py @@ -1,6 +1,7 @@ from datetime import date from typing import Optional +from fastapi_pagination import Page from pydantic import BaseModel @@ -29,3 +30,7 @@ class Book(BaseModel): authors: list[Author] translators: list[Author] annotation_exists: bool + + +class PageWithSequence(Page[Book]): + sequence: Sequence | None diff --git a/fastapi_book_server/app/views/sequence.py b/fastapi_book_server/app/views/sequence.py index 491572b..c721aab 100644 --- a/fastapi_book_server/app/views/sequence.py +++ b/fastapi_book_server/app/views/sequence.py @@ -9,7 +9,7 @@ from app.depends import check_token, get_allowed_langs from app.models import Book as BookDB from app.models import Sequence as SequenceDB from app.serializers.sequence import Book as SequenceBook -from app.serializers.sequence import Sequence +from app.serializers.sequence import PageWithSequence, Sequence from app.services.sequence import GetRandomSequenceService, SequenceMeiliSearchService from app.utils.transformer import dict_transformer @@ -49,13 +49,13 @@ async def get_sequence(id: int): @sequence_router.get( "/{id}/books", - response_model=Page[SequenceBook], + response_model=PageWithSequence, dependencies=[Depends(Params)], ) async def get_sequence_books( id: int, allowed_langs: Annotated[list[str], Depends(get_allowed_langs)] ): - return await paginate( + page: Page[SequenceBook] = await paginate( BookDB.objects.prefetch_related(["source"]) .select_related(["annotations", "authors", "translators"]) .filter(sequences__id=id, lang__in=allowed_langs, is_deleted=False) @@ -63,6 +63,16 @@ async def get_sequence_books( transformer=dict_transformer, ) + sequence = await SequenceDB.objects.get_or_none(id=id) + + return PageWithSequence( + items=page.items, + total=page.total, + page=page.page, + size=page.size, + sequence=sequence, # type: ignore + ) + @sequence_router.get( "/search/{query}",