This commit is contained in:
parent
7bb70c41df
commit
e46de27ba9
|
@ -27,10 +27,8 @@ def add_reaction_stat_columns(q, aliased_reaction):
|
|||
"""
|
||||
# Присоединение реакций и добавление статистических колонок
|
||||
q = q.outerjoin(aliased_reaction, aliased_reaction.deleted_at.is_(None)).add_columns(
|
||||
|
||||
# Подсчет комментариев
|
||||
func.count(case((aliased_reaction.body.is_not(None), 1), else_=0)).label("comments_stat"),
|
||||
|
||||
# Вычисление рейтинга как разница между лайками и дизлайками
|
||||
func.sum(
|
||||
case(
|
||||
|
@ -497,13 +495,7 @@ async def load_reactions_by(_, info, by, limit=50, offset=0):
|
|||
reactions = set()
|
||||
with local_session() as session:
|
||||
result_rows = session.execute(q)
|
||||
for [
|
||||
reaction,
|
||||
author,
|
||||
shout,
|
||||
commented_stat,
|
||||
rating_stat
|
||||
] in result_rows:
|
||||
for [reaction, author, shout, commented_stat, rating_stat] in result_rows:
|
||||
reaction.created_by = author
|
||||
reaction.shout = shout
|
||||
reaction.stat = {"rating": rating_stat, "commented": commented_stat}
|
||||
|
|
|
@ -47,7 +47,7 @@ def query_shouts():
|
|||
func.concat("slug:", Author.slug),
|
||||
func.concat("pic:", Author.pic),
|
||||
),
|
||||
" | "
|
||||
" | ",
|
||||
).label("authors"), # Используем символ | как разделитель
|
||||
)
|
||||
.join(Author, ShoutAuthor.author == Author.id)
|
||||
|
@ -67,7 +67,7 @@ def query_shouts():
|
|||
func.concat("slug:", Topic.slug),
|
||||
func.concat("is_main:", ShoutTopic.main),
|
||||
),
|
||||
" | "
|
||||
" | ",
|
||||
).label("topics"), # Используем символ | как разделитель
|
||||
)
|
||||
.join(Topic, ShoutTopic.topic == Topic.id)
|
||||
|
@ -105,6 +105,7 @@ def query_shouts():
|
|||
|
||||
return q, aliased_reaction
|
||||
|
||||
|
||||
def parse_aggregated_string(aggregated_str):
|
||||
"""
|
||||
Преобразует строку, полученную из string_agg, обратно в список словарей.
|
||||
|
@ -120,7 +121,7 @@ def parse_aggregated_string(aggregated_str):
|
|||
for item_str in aggregated_str.split(" | "):
|
||||
item_data = {}
|
||||
for field in item_str.split(";"):
|
||||
if ':' in field:
|
||||
if ":" in field:
|
||||
key, value = field.split(":", 1)
|
||||
item_data[key] = value
|
||||
else:
|
||||
|
@ -325,6 +326,7 @@ async def get_shout(_, info, slug: str):
|
|||
return shout
|
||||
except Exception as _exc:
|
||||
import traceback
|
||||
|
||||
logger.error(traceback.format_exc())
|
||||
return None
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user