Files
book_library_server/fastapi_book_server/app/views/translation.py

46 lines
1.4 KiB
Python

from typing import Union
from fastapi import APIRouter, Depends, HTTPException, status
from fastapi_pagination import Params
from fastapi_pagination.ext.ormar import paginate
from app.utils.pagination import CustomPage
from app.models import Translation as TranslationDB
from app.serializers.translation import Translation, CreateTranslation, CreateRemoteTranslation
from app.services.translation import TranslationCreator
from app.depends import check_token
translation_router = APIRouter(
prefix="/api/v1/translation",
tags=["translation"],
dependencies=[Depends(check_token)],
)
@translation_router.get("/", response_model=CustomPage[Translation], dependencies=[Depends(Params)])
async def get_translations():
return await paginate(
TranslationDB.objects.prefetch_related(["book", "author"])
)
@translation_router.post("/", response_model=Translation)
async def create_translation(data: Union[CreateTranslation, CreateRemoteTranslation]):
translation = await TranslationCreator.create(data)
return await TranslationDB.objects.prefetch_related(["book", "author"]).get(id=translation.id)
@translation_router.delete("/{id}", response_model=Translation)
async def delete_translation(id: int):
translation = await TranslationDB.objects.prefetch_related(["book", "author"]).get_or_none(id=id)
if translation is None:
raise HTTPException(status.HTTP_404_NOT_FOUND)
await translation.delete()
return translation