This commit is contained in:
2021-11-20 22:41:26 +03:00
parent 77540819bd
commit e504fc4cc8
3 changed files with 9 additions and 5 deletions

View File

@@ -14,6 +14,9 @@ class BookTGRMSearchService(TRGMSearchService):
BookDB.Meta.table.c.title BookDB.Meta.table.c.title
] ]
PREFETCH_RELATED = ["source"] PREFETCH_RELATED = ["source"]
FILTERS = [
BookDB.Meta.table.c.is_deleted == False,
]
class BookCreator: class BookCreator:

View File

@@ -7,7 +7,7 @@ from fastapi_pagination.bases import AbstractParams, RawParams
from app.utils.pagination import Page, CustomPage from app.utils.pagination import Page, CustomPage
from ormar import Model, QuerySet from ormar import Model, QuerySet
from sqlalchemy import text, func, select, or_, Table, Column from sqlalchemy import text, func, select, or_, Table, Column, cast, Text
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from databases import Database from databases import Database
@@ -29,6 +29,7 @@ class TRGMSearchService(Generic[T]):
FIELDS: Optional[list[Column]] = None FIELDS: Optional[list[Column]] = None
SELECT_RELATED: Optional[Union[list[str], str]] = None SELECT_RELATED: Optional[Union[list[str], str]] = None
PREFETCH_RELATED: Optional[Union[list[str], str]] = None PREFETCH_RELATED: Optional[Union[list[str], str]] = None
FILTERS = []
@classmethod @classmethod
def get_params(cls) -> AbstractParams: def get_params(cls) -> AbstractParams:
@@ -67,7 +68,7 @@ class TRGMSearchService(Generic[T]):
combs = cls.fields_combinations combs = cls.fields_combinations
return func.greatest( return func.greatest(
*[func.similarity(join_fields(comb), f"{query}::text") for comb in combs] *[func.similarity(join_fields(comb), cast(query, Text)) for comb in combs]
).label("sml") ).label("sml")
@classmethod @classmethod
@@ -90,8 +91,8 @@ class TRGMSearchService(Generic[T]):
).order_by( ).order_by(
text('sml DESC') text('sml DESC')
).filter( ).filter(
cls.table.c.is_deleted == False, similarity_filter,
similarity_filter *cls.FILTERS
).cte('objs') ).cte('objs')
sq = session.query(q1.c.id).limit(params.limit).offset(params.offset).subquery() sq = session.query(q1.c.id).limit(params.limit).offset(params.offset).subquery()

View File

@@ -43,7 +43,7 @@ async def get_book(id: int):
return book return book
@book_router.get("/{source_id}/{remote_id}", response_model=Book) @book_router.get("/remote/{source_id}/{remote_id}", response_model=Book)
async def get_remote_book(source_id: int, remote_id: int): async def get_remote_book(source_id: int, remote_id: int):
book = await BookDB.objects.select_related("authors").get_or_none( book = await BookDB.objects.select_related("authors").get_or_none(
source=source_id, source=source_id,