comments-rating-fix
All checks were successful
Deploy on push / deploy (push) Successful in 24s

This commit is contained in:
Untone 2024-03-29 00:36:19 +03:00
parent b8f08c3411
commit cc8f08588c

View File

@ -142,7 +142,7 @@ def add_rating_columns(q, group_list):
) )
# by shouts # by shouts
subq = select(Reaction).where( shouts_subq = select(Reaction).where(
and_( and_(
Reaction.shout == Shout.id, Reaction.shout == Shout.id,
Shout.authors.any(id=Author.id), Shout.authors.any(id=Author.id),
@ -151,16 +151,16 @@ def add_rating_columns(q, group_list):
) )
).subquery() ).subquery()
q = q.outerjoin(subq, subq.c.shout == Shout.id) q = q.outerjoin(shouts_subq, shouts_subq.c.shout == Shout.id)
q = q.add_columns( q = q.add_columns(
func.count(distinct(case((subq.c.kind == ReactionKind.LIKE.value, 1)))).label('shouts_likes'), func.count(distinct(case((shouts_subq.c.kind == ReactionKind.LIKE.value, 1)))).label('shouts_likes'),
func.count(distinct(case((subq.c.kind == ReactionKind.DISLIKE.value, 1)))).label('shouts_dislikes'), func.count(distinct(case((shouts_subq.c.kind == ReactionKind.DISLIKE.value, 1)))).label('shouts_dislikes'),
) )
group_list.extend([subq.c.shouts_likes, subq.c.shouts_dislikes]) group_list.extend([shouts_subq.c.shouts_likes, shouts_subq.c.shouts_dislikes])
# by comments # by comments
replied_comment = aliased(Reaction) replied_comment = aliased(Reaction)
subq = select(Reaction).where( comments_subq = select(Reaction).where(
and_( and_(
replied_comment.kind == ReactionKind.COMMENT.value, replied_comment.kind == ReactionKind.COMMENT.value,
replied_comment.created_by == Author.id, replied_comment.created_by == Author.id,
@ -170,11 +170,11 @@ def add_rating_columns(q, group_list):
) )
).subquery() ).subquery()
q = q.outerjoin(subq, subq.c.reply_to == replied_comment.id) q = q.outerjoin(comments_subq, comments_subq.c.reply_to == replied_comment.id)
q = q.add_columns( q = q.add_columns(
func.count(distinct(case((subq.c.kind == ReactionKind.LIKE.value, 1)))).label('comments_likes'), func.count(distinct(case((comments_subq.c.kind == ReactionKind.LIKE.value, 1)))).label('comments_likes'),
func.count(distinct(case((subq.c.kind == ReactionKind.DISLIKE.value, 1)))).label('comments_dislikes'), func.count(distinct(case((comments_subq.c.kind == ReactionKind.DISLIKE.value, 1)))).label('comments_dislikes'),
) )
group_list.extend([subq.c.comments_likes, subq.c.comments_dislikes]) group_list.extend([comments_subq.c.comments_likes, comments_subq.c.comments_dislikes])
return q, group_list return q, group_list