Files
book_library_server/fastapi_book_server/app/views/sequence_info.py
2021-12-10 16:02:56 +03:00

49 lines
1.8 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 Sequence as SequenceInfoDB
from app.serializers.sequence_info import SequenceInfo, CreateSequenceInfo, CreateRemoteSequenceInfo
from app.services.sequence_info import SequenceInfoCreator
from app.depends import check_token
sequence_info_router = APIRouter(
prefix="/api/v1/sequence_info",
tags=["sequence_info"],
dependencies=[Depends(check_token)],
)
@sequence_info_router.get("/", response_model=CustomPage[SequenceInfo], dependencies=[Depends(Params)])
async def get_sequence_infos():
return await paginate(
SequenceInfoDB.objects.prefetch_related(["book", "sequence"])
.select_related(["book__authors", "book__translations", "book__translations__translator"])
)
@sequence_info_router.get("/{id}", response_model=SequenceInfo)
async def get_sequence_info(id: int):
sequence_info = await SequenceInfoDB.objects.prefetch_related(["book", "sequence"]) \
.select_related(["book__authors", "book__translations", "book__translations__translator"]) \
.get_or_none(id=id)
if sequence_info is None:
raise HTTPException(status.HTTP_404_NOT_FOUND)
return sequence_info
@sequence_info_router.post("/", response_model=SequenceInfo)
async def create_sequence_info(data: Union[CreateSequenceInfo, CreateRemoteSequenceInfo]):
sequence_info = await SequenceInfoCreator.create(data)
return await SequenceInfoDB.objects.prefetch_related(["book", "sequence"]) \
.select_related(["book__authors", "book__translations", "book__translations__translator"]) \
.get(id=sequence_info.id)