From d710673c16858f5dacefac5578b7b4c444733d21 Mon Sep 17 00:00:00 2001 From: Bulat Kurbanov Date: Wed, 7 Jun 2023 04:36:22 +0200 Subject: [PATCH] Add available_types handlers --- fastapi_book_server/app/views/author.py | 38 ++++++++++++++++++++++- fastapi_book_server/app/views/sequence.py | 22 ++++++++++++- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/fastapi_book_server/app/views/author.py b/fastapi_book_server/app/views/author.py index 729661c..1b73bf5 100644 --- a/fastapi_book_server/app/views/author.py +++ b/fastapi_book_server/app/views/author.py @@ -1,4 +1,4 @@ -from typing import Annotated +from typing import Annotated, cast from fastapi import APIRouter, Depends, HTTPException, Request, status @@ -110,6 +110,23 @@ async def get_author_books( ) +@author_router.get("/{id}/available_types", response_model=list[str]) +async def get_author_books_available_types( + id: int, allowed_langs: Annotated[list[str], Depends(get_allowed_langs)] +) -> list[str]: + books = await BookDB.objects.filter( + authors__id=id, lang__in=allowed_langs, is_deleted=False + ).all() + + file_types: set[str] = set() + + for book in books: + for file_type in cast(list[str], book.available_types): + file_types.add(file_type) + + return list(file_types) + + @author_router.get( "/search/{query}", response_model=Page[Author], dependencies=[Depends(Params)] ) @@ -158,6 +175,25 @@ async def get_translated_books( ) +@translator_router.get("/{id}/available_types", response_model=list[str]) +async def get_translator_books_available_types( + id: int, allowed_langs: Annotated[list[str], Depends(get_allowed_langs)] +) -> list[str]: + books = await BookDB.objects.filter( + translators__id=id, + lang__in=allowed_langs, + is_deleted=False, + ).all() + + file_types: set[str] = set() + + for book in books: + for file_type in cast(list[str], book.available_types): + file_types.add(file_type) + + return list(file_types) + + @translator_router.get( "/search/{query}", response_model=Page[Author], dependencies=[Depends(Params)] ) diff --git a/fastapi_book_server/app/views/sequence.py b/fastapi_book_server/app/views/sequence.py index c3e67e4..5d98d8b 100644 --- a/fastapi_book_server/app/views/sequence.py +++ b/fastapi_book_server/app/views/sequence.py @@ -1,4 +1,4 @@ -from typing import Annotated +from typing import Annotated, cast from fastapi import APIRouter, Depends, HTTPException, Request, status @@ -75,6 +75,26 @@ async def get_sequence_books( ) +@sequence_router.get( + "/{id}/available_types", + response_model=list[str], +) +async def sequence_available_types( + id: int, allowed_langs: Annotated[list[str], Depends(get_allowed_langs)] +) -> list[str]: + books = await BookDB.objects.filter( + sequence__id=id, lang__in=allowed_langs, is_deleted=False + ).all() + + file_types: set[str] = set() + + for book in books: + for file_type in cast(list[str], book.available_types): + file_types.add(file_type) + + return list(file_types) + + @sequence_router.get( "/search/{query}", response_model=Page[Sequence],