mirror of
https://github.com/flibusta-apps/book_library_server.git
synced 2025-12-06 07:05:36 +01:00
50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
from fastapi import APIRouter, Depends, Request
|
|
|
|
from fastapi_pagination import Params
|
|
from fastapi_pagination.ext.ormar import paginate
|
|
from app.utils.pagination import CustomPage
|
|
|
|
from app.models import Sequence as SequenceDB, Book as BookDB, BookSequences as BookSequencesDB
|
|
from app.serializers.sequence import Sequence, CreateSequence, Book as SequenceBook
|
|
from app.services.sequence import SequenceTGRMSearchService
|
|
from app.depends import check_token
|
|
|
|
|
|
sequence_router = APIRouter(
|
|
prefix="/api/v1/sequences",
|
|
tags=["sequence"],
|
|
dependencies=[Depends(check_token)],
|
|
)
|
|
|
|
|
|
@sequence_router.get("/", response_model=CustomPage[Sequence], dependencies=[Depends(Params)])
|
|
async def get_sequences():
|
|
return await paginate(
|
|
SequenceDB.objects
|
|
)
|
|
|
|
|
|
@sequence_router.get("/{id}", response_model=Sequence)
|
|
async def get_sequence(id: int):
|
|
return await SequenceDB.objects.get(id=id)
|
|
|
|
|
|
@sequence_router.get("/{id}/books", response_model=CustomPage[SequenceBook], dependencies=[Depends(Params)])
|
|
async def get_sequence_books(id: int):
|
|
return await paginate(
|
|
BookDB.objects.select_related(["source", "annotations", "authors"])
|
|
.filter(sequences__id=id).order_by("sequences__booksequences__position")
|
|
)
|
|
|
|
|
|
@sequence_router.post("/", response_model=Sequence)
|
|
async def create_sequence(data: CreateSequence):
|
|
return await SequenceDB.objects.create(
|
|
**data.dict()
|
|
)
|
|
|
|
|
|
@sequence_router.get("/search/{query}", response_model=CustomPage[Sequence], dependencies=[Depends(Params)])
|
|
async def search_sequences(query: str, request: Request):
|
|
return await SequenceTGRMSearchService.get(query, request.app.state.redis)
|