mirror of
https://github.com/flibusta-apps/book_library_server.git
synced 2025-12-06 07:05:36 +01:00
39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
from app.models import Sequence
|
|
from app.services.common import TRGMSearchService, GetRandomService
|
|
|
|
|
|
GET_OBJECT_IDS_QUERY = """
|
|
SELECT ARRAY (
|
|
WITH filtered_sequences AS (
|
|
SELECT
|
|
id,
|
|
similarity(name, :query) as sml,
|
|
(
|
|
SELECT count(*) FROM book_sequences
|
|
LEFT JOIN books ON (books.id = book AND books.is_deleted = 'f')
|
|
WHERE sequence = sequences.id
|
|
) as books_count
|
|
FROM sequences
|
|
WHERE name % :query AND
|
|
EXISTS (
|
|
SELECT * FROM book_sequences
|
|
LEFT JOIN books ON (books.id = book AND books.is_deleted = 'f')
|
|
WHERE sequence = sequences.id
|
|
)
|
|
)
|
|
SELECT fsequences.id FROM filtered_sequences as fsequences
|
|
ORDER BY fsequences.sml DESC, fsequences.books_count DESC
|
|
LIMIT 210
|
|
);
|
|
"""
|
|
|
|
|
|
class SequenceTGRMSearchService(TRGMSearchService):
|
|
MODEL_CLASS = Sequence
|
|
PREFETCH_RELATED = ["source"]
|
|
GET_OBJECT_IDS_QUERY = GET_OBJECT_IDS_QUERY
|
|
|
|
|
|
class GetRandomSequenceService(GetRandomService):
|
|
MODEL_CLASS = Sequence
|