alc
Some checks failed
Deploy on push / deploy (push) Failing after 8s

This commit is contained in:
Untone 2024-08-07 14:54:13 +03:00
parent 1524f141b8
commit c601fcc2a4

View File

@ -23,6 +23,8 @@ from utils.logger import root_logger as logger
from services.schema import query from services.schema import query
from services.search import search_text from services.search import search_text
from services.viewed import ViewedStorage from services.viewed import ViewedStorage
def query_shouts(): def query_shouts():
""" """
Базовый запрос для получения публикаций с подзапросами статистики, авторов и тем. Базовый запрос для получения публикаций с подзапросами статистики, авторов и тем.
@ -32,44 +34,44 @@ def query_shouts():
# Создаем алиасы для таблиц для избежания конфликтов имен # Создаем алиасы для таблиц для избежания конфликтов имен
aliased_reaction = aliased(Reaction) aliased_reaction = aliased(Reaction)
# Используем чистый SQL-запрос для подзапросов с уникальными значениями # Используем SQLAlchemy для подзапросов с уникальными значениями
authors_subquery = text(""" authors_subquery = (
SELECT select(
shout.id AS shout_id, Shout.id.label("shout_id"),
json_agg(distinct json_build_object( func.json_agg(
'id', author.id, distinct(
'name', author.name, func.json_build_object(
'slug', author.slug, 'id', Author.id,
'pic', author.pic 'name', Author.name,
)) AS authors 'slug', Author.slug,
FROM 'pic', Author.pic
author )
JOIN )
shout_author ON shout_author.author = author.id ).label("authors")
JOIN )
shout ON shout.id = shout_author.shout .join(ShoutAuthor, ShoutAuthor.author == Author.id)
GROUP BY .group_by(Shout.id)
shout.id .subquery()
""") )
topics_subquery = text(""" topics_subquery = (
SELECT select(
shout.id AS shout_id, Shout.id.label("shout_id"),
json_agg(distinct json_build_object( func.json_agg(
'id', topic.id, distinct(
'title', topic.title, func.json_build_object(
'body', topic.body, 'id', Topic.id,
'slug', topic.slug 'title', Topic.title,
)) AS topics 'body', Topic.body,
FROM 'slug', Topic.slug
topic )
JOIN )
shout_topic ON shout_topic.topic = topic.id ).label("topics")
JOIN )
shout ON shout.id = shout_topic.shout .join(ShoutTopic, ShoutTopic.topic == Topic.id)
GROUP BY .group_by(Shout.id)
shout.id .subquery()
""") )
# Основной запрос с использованием подзапросов # Основной запрос с использованием подзапросов
q = ( q = (