This commit is contained in:
parent
325927739e
commit
e4d7284681
|
@ -22,6 +22,7 @@ logger.setLevel(logging.DEBUG)
|
||||||
|
|
||||||
def add_stat_columns(q, aliased_reaction):
|
def add_stat_columns(q, aliased_reaction):
|
||||||
q = q.outerjoin(aliased_reaction).add_columns(
|
q = q.outerjoin(aliased_reaction).add_columns(
|
||||||
|
func.sum(aliased_reaction.id).label('reacted_stat'),
|
||||||
func.sum(case((aliased_reaction.kind == ReactionKind.COMMENT.value, 1), else_=0)).label('comments_stat'),
|
func.sum(case((aliased_reaction.kind == ReactionKind.COMMENT.value, 1), else_=0)).label('comments_stat'),
|
||||||
func.sum(case((aliased_reaction.kind == ReactionKind.LIKE.value, 1), else_=0)).label('likes_stat'),
|
func.sum(case((aliased_reaction.kind == ReactionKind.LIKE.value, 1), else_=0)).label('likes_stat'),
|
||||||
func.sum(case((aliased_reaction.kind == ReactionKind.DISLIKE.value, 1), else_=0)).label('dislikes_stat'),
|
func.sum(case((aliased_reaction.kind == ReactionKind.DISLIKE.value, 1), else_=0)).label('dislikes_stat'),
|
||||||
|
@ -291,7 +292,7 @@ async def update_reaction(_, info, rid, reaction):
|
||||||
q = add_stat_columns(q, aliased_reaction)
|
q = add_stat_columns(q, aliased_reaction)
|
||||||
q = q.group_by(Reaction.id)
|
q = q.group_by(Reaction.id)
|
||||||
|
|
||||||
[r, commented_stat, likes_stat, dislikes_stat, _l] = session.execute(q).unique().one()
|
[r, reacted_stat, commented_stat, likes_stat, dislikes_stat, _l] = session.execute(q).unique().first()
|
||||||
|
|
||||||
if not r:
|
if not r:
|
||||||
return {'error': 'invalid reaction id'}
|
return {'error': 'invalid reaction id'}
|
||||||
|
@ -309,6 +310,7 @@ async def update_reaction(_, info, rid, reaction):
|
||||||
|
|
||||||
session.commit()
|
session.commit()
|
||||||
r.stat = {
|
r.stat = {
|
||||||
|
'reacted': reacted_stat,
|
||||||
'commented': commented_stat,
|
'commented': commented_stat,
|
||||||
'rating': int(likes_stat or 0) - int(dislikes_stat or 0),
|
'rating': int(likes_stat or 0) - int(dislikes_stat or 0),
|
||||||
}
|
}
|
||||||
|
@ -420,6 +422,7 @@ async def load_reactions_by(_, info, by, limit=50, offset=0):
|
||||||
reaction,
|
reaction,
|
||||||
author,
|
author,
|
||||||
shout,
|
shout,
|
||||||
|
reacted_stat,
|
||||||
commented_stat,
|
commented_stat,
|
||||||
likes_stat,
|
likes_stat,
|
||||||
dislikes_stat,
|
dislikes_stat,
|
||||||
|
@ -429,6 +432,7 @@ async def load_reactions_by(_, info, by, limit=50, offset=0):
|
||||||
reaction.shout = shout
|
reaction.shout = shout
|
||||||
reaction.stat = {
|
reaction.stat = {
|
||||||
'rating': int(likes_stat or 0) - int(dislikes_stat or 0),
|
'rating': int(likes_stat or 0) - int(dislikes_stat or 0),
|
||||||
|
'reacted': reacted_stat,
|
||||||
'commented': commented_stat,
|
'commented': commented_stat,
|
||||||
}
|
}
|
||||||
reactions.append(reaction)
|
reactions.append(reaction)
|
||||||
|
@ -482,6 +486,7 @@ async def reacted_shouts_updates(follower_id: int, limit=50, offset=0) -> List[S
|
||||||
with local_session() as session:
|
with local_session() as session:
|
||||||
for [
|
for [
|
||||||
shout,
|
shout,
|
||||||
|
reacted_stat,
|
||||||
commented_stat,
|
commented_stat,
|
||||||
likes_stat,
|
likes_stat,
|
||||||
dislikes_stat,
|
dislikes_stat,
|
||||||
|
@ -490,6 +495,7 @@ async def reacted_shouts_updates(follower_id: int, limit=50, offset=0) -> List[S
|
||||||
shout.stat = {
|
shout.stat = {
|
||||||
'viewed': await ViewedStorage.get_shout(shout.slug),
|
'viewed': await ViewedStorage.get_shout(shout.slug),
|
||||||
'rating': int(likes_stat or 0) - int(dislikes_stat or 0),
|
'rating': int(likes_stat or 0) - int(dislikes_stat or 0),
|
||||||
|
'reacted': reacted_stat,
|
||||||
'commented': commented_stat,
|
'commented': commented_stat,
|
||||||
'last_comment': last_comment,
|
'last_comment': last_comment,
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,6 +69,7 @@ async def get_shout(_, _info, slug=None, shout_id=None):
|
||||||
if results:
|
if results:
|
||||||
[
|
[
|
||||||
shout,
|
shout,
|
||||||
|
reacted_stat,
|
||||||
commented_stat,
|
commented_stat,
|
||||||
likes_stat,
|
likes_stat,
|
||||||
dislikes_stat,
|
dislikes_stat,
|
||||||
|
@ -77,7 +78,7 @@ async def get_shout(_, _info, slug=None, shout_id=None):
|
||||||
|
|
||||||
shout.stat = {
|
shout.stat = {
|
||||||
'viewed': await ViewedStorage.get_shout(shout.slug),
|
'viewed': await ViewedStorage.get_shout(shout.slug),
|
||||||
# "reacted": reacted_stat,
|
'reacted': reacted_stat,
|
||||||
'commented': commented_stat,
|
'commented': commented_stat,
|
||||||
'rating': int(likes_stat or 0) - int(dislikes_stat or 0),
|
'rating': int(likes_stat or 0) - int(dislikes_stat or 0),
|
||||||
}
|
}
|
||||||
|
@ -161,6 +162,7 @@ async def load_shouts_by(_, _info, options):
|
||||||
with local_session() as session:
|
with local_session() as session:
|
||||||
for [
|
for [
|
||||||
shout,
|
shout,
|
||||||
|
reacted_stat,
|
||||||
commented_stat,
|
commented_stat,
|
||||||
likes_stat,
|
likes_stat,
|
||||||
dislikes_stat,
|
dislikes_stat,
|
||||||
|
@ -183,6 +185,7 @@ async def load_shouts_by(_, _info, options):
|
||||||
shout.main_topic = main_topic[0]
|
shout.main_topic = main_topic[0]
|
||||||
shout.stat = {
|
shout.stat = {
|
||||||
'viewed': await ViewedStorage.get_shout(shout.slug),
|
'viewed': await ViewedStorage.get_shout(shout.slug),
|
||||||
|
'reacted': reacted_stat,
|
||||||
'commented': commented_stat,
|
'commented': commented_stat,
|
||||||
'rating': int(likes_stat) - int(dislikes_stat),
|
'rating': int(likes_stat) - int(dislikes_stat),
|
||||||
}
|
}
|
||||||
|
@ -283,7 +286,7 @@ async def load_shouts_feed(_, info, options):
|
||||||
|
|
||||||
# print(q.compile(compile_kwargs={"literal_binds": True}))
|
# print(q.compile(compile_kwargs={"literal_binds": True}))
|
||||||
|
|
||||||
for [shout, reacted_stat, commented_stat, _last_comment] in session.execute(q).unique():
|
for [shout, reacted_stat, commented_stat, likes_stat, dislikes_stat, _last_comment] in session.execute(q).unique():
|
||||||
main_topic = (
|
main_topic = (
|
||||||
session.query(Topic.slug)
|
session.query(Topic.slug)
|
||||||
.join(
|
.join(
|
||||||
|
@ -303,6 +306,7 @@ async def load_shouts_feed(_, info, options):
|
||||||
'viewed': await ViewedStorage.get_shout(shout.slug),
|
'viewed': await ViewedStorage.get_shout(shout.slug),
|
||||||
'reacted': reacted_stat,
|
'reacted': reacted_stat,
|
||||||
'commented': commented_stat,
|
'commented': commented_stat,
|
||||||
|
'rating': likes_stat - dislikes_stat
|
||||||
}
|
}
|
||||||
shouts.append(shout)
|
shouts.append(shout)
|
||||||
|
|
||||||
|
@ -367,16 +371,19 @@ async def get_shouts_from_query(q, author_id=None):
|
||||||
with local_session() as session:
|
with local_session() as session:
|
||||||
for [
|
for [
|
||||||
shout,
|
shout,
|
||||||
|
reacted_stat,
|
||||||
commented_stat,
|
commented_stat,
|
||||||
likes_stat,
|
likes_stat,
|
||||||
dislikes_stat,
|
dislikes_stat,
|
||||||
_last_comment,
|
last_comment,
|
||||||
] in session.execute(q, {'author_id': author_id}).unique():
|
] in session.execute(q, {'author_id': author_id}).unique():
|
||||||
shouts.append(shout)
|
shouts.append(shout)
|
||||||
shout.stat = {
|
shout.stat = {
|
||||||
'viewed': await ViewedStorage.get_shout(shout_slug=shout.slug),
|
'viewed': await ViewedStorage.get_shout(shout_slug=shout.slug),
|
||||||
|
'reacted': reacted_stat,
|
||||||
'commented': commented_stat,
|
'commented': commented_stat,
|
||||||
'rating': int(likes_stat or 0) - int(dislikes_stat or 0),
|
'rating': int(likes_stat or 0) - int(dislikes_stat or 0),
|
||||||
|
'last_comment': last_comment
|
||||||
}
|
}
|
||||||
|
|
||||||
return shouts
|
return shouts
|
||||||
|
|
Loading…
Reference in New Issue
Block a user