This commit is contained in:
2023-06-06 15:04:28 +02:00
parent e55c1abd7b
commit fa04533a74
8 changed files with 35 additions and 10 deletions

View File

@@ -0,0 +1,10 @@
from typing import Any, Sequence, TypeVar
from pydantic import BaseModel
T = TypeVar("T", bound=BaseModel)
async def dict_transformer(items: Sequence[T]) -> Sequence[dict[str, Any]]:
return [item.dict() for item in items]

View File

@@ -13,6 +13,7 @@ from app.serializers.author import Author, AuthorBook, TranslatedBook
from app.serializers.author_annotation import AuthorAnnotation from app.serializers.author_annotation import AuthorAnnotation
from app.services.author import AuthorMeiliSearchService, GetRandomAuthorService from app.services.author import AuthorMeiliSearchService, GetRandomAuthorService
from app.services.translator import TranslatorMeiliSearchService from app.services.translator import TranslatorMeiliSearchService
from app.utils.transformer import dict_transformer
author_router = APIRouter( author_router = APIRouter(
@@ -31,7 +32,8 @@ async def get_authors():
return await paginate( return await paginate(
AuthorDB.objects.select_related(SELECT_RELATED_FIELDS).prefetch_related( AuthorDB.objects.select_related(SELECT_RELATED_FIELDS).prefetch_related(
PREFETCH_RELATED_FIELDS PREFETCH_RELATED_FIELDS
) ),
transformer=dict_transformer,
) )
@@ -88,7 +90,8 @@ async def get_author_books(
BookDB.objects.prefetch_related(["source"]) BookDB.objects.prefetch_related(["source"])
.select_related(["annotations", "translators", "sequences"]) .select_related(["annotations", "translators", "sequences"])
.filter(authors__id=id, lang__in=allowed_langs, is_deleted=False) .filter(authors__id=id, lang__in=allowed_langs, is_deleted=False)
.order_by("title") .order_by("title"),
transformer=dict_transformer,
) )
@@ -124,7 +127,8 @@ async def get_translated_books(
translators__id=id, translators__id=id,
lang__in=allowed_langs, lang__in=allowed_langs,
is_deleted=False, is_deleted=False,
) ),
transformer=dict_transformer,
) )

View File

@@ -6,6 +6,7 @@ from fastapi_pagination.ext.ormar import paginate
from app.depends import check_token from app.depends import check_token
from app.models import AuthorAnnotation as AuthorAnnotationDB from app.models import AuthorAnnotation as AuthorAnnotationDB
from app.serializers.author_annotation import AuthorAnnotation from app.serializers.author_annotation import AuthorAnnotation
from app.utils.transformer import dict_transformer
author_annotation_router = APIRouter( author_annotation_router = APIRouter(
@@ -19,7 +20,7 @@ author_annotation_router = APIRouter(
"/", response_model=Page[AuthorAnnotation], dependencies=[Depends(Params)] "/", response_model=Page[AuthorAnnotation], dependencies=[Depends(Params)]
) )
async def get_author_annotations(): async def get_author_annotations():
return await paginate(AuthorAnnotationDB.objects) return await paginate(AuthorAnnotationDB.objects, transformer=dict_transformer)
@author_annotation_router.get("/{id}", response_model=AuthorAnnotation) @author_annotation_router.get("/{id}", response_model=AuthorAnnotation)

View File

@@ -6,6 +6,7 @@ from fastapi_pagination.ext.ormar import paginate
from app.depends import check_token from app.depends import check_token
from app.models import BookAnnotation as BookAnnotationDB from app.models import BookAnnotation as BookAnnotationDB
from app.serializers.book_annotation import BookAnnotation from app.serializers.book_annotation import BookAnnotation
from app.utils.transformer import dict_transformer
book_annotation_router = APIRouter( book_annotation_router = APIRouter(
@@ -19,7 +20,7 @@ book_annotation_router = APIRouter(
"/", response_model=Page[BookAnnotation], dependencies=[Depends(Params)] "/", response_model=Page[BookAnnotation], dependencies=[Depends(Params)]
) )
async def get_book_annotations(): async def get_book_annotations():
return await paginate(BookAnnotationDB.objects) return await paginate(BookAnnotationDB.objects, transformer=dict_transformer)
@book_annotation_router.get("/{id}", response_model=BookAnnotation) @book_annotation_router.get("/{id}", response_model=BookAnnotation)

View File

@@ -10,6 +10,7 @@ from app.filters.genre import get_genre_filter
from app.models import Genre as GenreDB from app.models import Genre as GenreDB
from app.serializers.genre import Genre from app.serializers.genre import Genre
from app.services.genre import GenreMeiliSearchService from app.services.genre import GenreMeiliSearchService
from app.utils.transformer import dict_transformer
genre_router = APIRouter( genre_router = APIRouter(
@@ -25,7 +26,8 @@ async def get_genres(genre_filter: Annotated[dict, Depends(get_genre_filter)]):
return await paginate( return await paginate(
GenreDB.objects.prefetch_related(PREFETCH_RELATED_FIELDS) GenreDB.objects.prefetch_related(PREFETCH_RELATED_FIELDS)
.filter(**genre_filter) .filter(**genre_filter)
.order_by("description") .order_by("description"),
transformer=dict_transformer,
) )

View File

@@ -11,6 +11,7 @@ from app.models import Sequence as SequenceDB
from app.serializers.sequence import Book as SequenceBook from app.serializers.sequence import Book as SequenceBook
from app.serializers.sequence import Sequence from app.serializers.sequence import Sequence
from app.services.sequence import GetRandomSequenceService, SequenceMeiliSearchService from app.services.sequence import GetRandomSequenceService, SequenceMeiliSearchService
from app.utils.transformer import dict_transformer
sequence_router = APIRouter( sequence_router = APIRouter(
@@ -22,7 +23,7 @@ sequence_router = APIRouter(
@sequence_router.get("/", response_model=Page[Sequence], dependencies=[Depends(Params)]) @sequence_router.get("/", response_model=Page[Sequence], dependencies=[Depends(Params)])
async def get_sequences(): async def get_sequences():
return await paginate(SequenceDB.objects) return await paginate(SequenceDB.objects, transformer=dict_transformer)
@sequence_router.get("/random", response_model=Sequence) @sequence_router.get("/random", response_model=Sequence)
@@ -58,7 +59,8 @@ async def get_sequence_books(
BookDB.objects.prefetch_related(["source"]) BookDB.objects.prefetch_related(["source"])
.select_related(["annotations", "authors", "translators"]) .select_related(["annotations", "authors", "translators"])
.filter(sequences__id=id, lang__in=allowed_langs, is_deleted=False) .filter(sequences__id=id, lang__in=allowed_langs, is_deleted=False)
.order_by("sequences__booksequences__position") .order_by("sequences__booksequences__position"),
transformer=dict_transformer,
) )

View File

@@ -6,6 +6,7 @@ from fastapi_pagination.ext.ormar import paginate
from app.depends import check_token from app.depends import check_token
from app.models import Source as SourceDB from app.models import Source as SourceDB
from app.serializers.source import Source from app.serializers.source import Source
from app.utils.transformer import dict_transformer
source_router = APIRouter( source_router = APIRouter(
@@ -17,4 +18,4 @@ source_router = APIRouter(
@source_router.get("", response_model=Page[Source], dependencies=[Depends(Params)]) @source_router.get("", response_model=Page[Source], dependencies=[Depends(Params)])
async def get_sources(): async def get_sources():
return await paginate(SourceDB.objects) return await paginate(SourceDB.objects, transformer=dict_transformer)

View File

@@ -6,6 +6,7 @@ from fastapi_pagination.ext.ormar import paginate
from app.depends import check_token from app.depends import check_token
from app.models import Translation as TranslationDB from app.models import Translation as TranslationDB
from app.serializers.translation import Translation from app.serializers.translation import Translation
from app.utils.transformer import dict_transformer
translation_router = APIRouter( translation_router = APIRouter(
@@ -19,4 +20,7 @@ translation_router = APIRouter(
"/", response_model=Page[Translation], dependencies=[Depends(Params)] "/", response_model=Page[Translation], dependencies=[Depends(Params)]
) )
async def get_translations(): async def get_translations():
return await paginate(TranslationDB.objects.select_related(["book", "author"])) return await paginate(
TranslationDB.objects.select_related(["book", "author"]),
transformer=dict_transformer,
)