myrates-api-minor-fix3

This commit is contained in:
Untone 2024-11-18 22:10:25 +03:00
parent 773615e201
commit 6966d900fa

View File

@ -52,25 +52,30 @@ async def get_my_rates_shouts(_, info, shouts):
if not author_id: if not author_id:
return {"error": "Author not found"} return {"error": "Author not found"}
# Подзапрос для реакций текущего пользователя with local_session() as session:
rated_query = ( # Используем прямой запрос без подзапросов
select(Reaction.shout.label("shout_id"), Reaction.kind.label("my_rate")) result = session.execute(
.where( select([
Reaction.shout.label("shout_id"),
Reaction.kind.label("my_rate")
]).where(
and_( and_(
Reaction.shout.in_(shouts), Reaction.shout.in_(shouts),
Reaction.reply_to.is_(None), Reaction.reply_to.is_(None),
Reaction.created_by == author_id, Reaction.created_by == author_id,
Reaction.deleted_at.is_(None), Reaction.deleted_at.is_(None),
Reaction.kind.in_([ReactionKind.LIKE.value, ReactionKind.DISLIKE.value]), Reaction.kind.in_([ReactionKind.LIKE.value, ReactionKind.DISLIKE.value])
) )
) ).order_by(
.order_by(Reaction.shout, Reaction.created_at.desc()) Reaction.shout,
.distinct(Reaction.shout) Reaction.created_at.desc()
.subquery() ).distinct(Reaction.shout)
) ).all()
with local_session() as session:
shouts_result = session.execute(rated_query).all() return [
return [{"shout_id": row.shout_id, "my_rate": row.my_rate} for row in shouts_result] {"shout_id": row.shout_id, "my_rate": row.my_rate}
for row in result
]
@mutation.field("rate_author") @mutation.field("rate_author")