mirror of
https://github.com/flibusta-apps/book_library_server.git
synced 2025-12-06 15:15:36 +01:00
46 lines
1.5 KiB
Python
46 lines
1.5 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", "translator"])
|
|
)
|
|
|
|
|
|
@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", "translator"]).get(id=translation.id)
|
|
|
|
|
|
@translation_router.delete("/{id}", response_model=Translation)
|
|
async def delete_translation(id: int):
|
|
translation = await TranslationDB.objects.prefetch_related(["book", "translator"]).get_or_none(id=id)
|
|
|
|
if translation is None:
|
|
raise HTTPException(status.HTTP_404_NOT_FOUND)
|
|
|
|
await translation.delete()
|
|
|
|
return translation
|