This commit is contained in:
parent
f930822d8a
commit
af761f916f
|
@ -317,6 +317,39 @@ async def delete_reaction(_, info, rid):
|
||||||
return {"error": "access denied"}
|
return {"error": "access denied"}
|
||||||
|
|
||||||
|
|
||||||
|
def apply_reaction_filters(by, q):
|
||||||
|
if by.get("shout"):
|
||||||
|
q = q.filter(Shout.slug == by["shout"])
|
||||||
|
|
||||||
|
elif by.get("shouts"):
|
||||||
|
q = q.filter(Shout.slug.in_(by["shouts"]))
|
||||||
|
|
||||||
|
if by.get("created_by"):
|
||||||
|
q = q.filter(Author.id == by["created_by"])
|
||||||
|
|
||||||
|
if by.get("topic"):
|
||||||
|
# TODO: check
|
||||||
|
q = q.filter(Shout.topics.contains(by["topic"]))
|
||||||
|
|
||||||
|
if by.get("comment"):
|
||||||
|
q = q.filter(func.length(Reaction.body) > 0)
|
||||||
|
|
||||||
|
# NOTE: not using ElasticSearch here
|
||||||
|
by_search = by.get("search", "")
|
||||||
|
if len(by_search) > 2:
|
||||||
|
q = q.filter(Reaction.body.ilike(f'%{by_search}%'))
|
||||||
|
|
||||||
|
if by.get("after"):
|
||||||
|
after = int(by["after"])
|
||||||
|
q = q.filter(Reaction.created_at > after)
|
||||||
|
|
||||||
|
order_way = asc if by.get("sort", "").startswith("-") else desc
|
||||||
|
order_field = by.get("sort", "").replace("-", "") or "created_at"
|
||||||
|
q = q.group_by(Reaction.id, Author.id, Shout.id).order_by(order_way(order_field))
|
||||||
|
|
||||||
|
return q
|
||||||
|
|
||||||
|
|
||||||
@query.field("load_reactions_by")
|
@query.field("load_reactions_by")
|
||||||
async def load_reactions_by(_, info, by, limit=50, offset=0):
|
async def load_reactions_by(_, info, by, limit=50, offset=0):
|
||||||
"""
|
"""
|
||||||
|
@ -342,36 +375,11 @@ async def load_reactions_by(_, info, by, limit=50, offset=0):
|
||||||
.join(Shout, Reaction.shout == Shout.id)
|
.join(Shout, Reaction.shout == Shout.id)
|
||||||
)
|
)
|
||||||
|
|
||||||
if by.get("shout"):
|
|
||||||
q = q.filter(Shout.slug == by["shout"])
|
|
||||||
elif by.get("shouts"):
|
|
||||||
q = q.filter(Shout.slug.in_(by["shouts"]))
|
|
||||||
|
|
||||||
if by.get("created_by"):
|
|
||||||
q = q.filter(Author.id == by.get("created_by"))
|
|
||||||
|
|
||||||
if by.get("topic"):
|
|
||||||
# TODO: check
|
|
||||||
q = q.filter(Shout.topics.contains(by["topic"]))
|
|
||||||
|
|
||||||
if by.get("comment"):
|
|
||||||
q = q.filter(func.length(Reaction.body) > 0)
|
|
||||||
|
|
||||||
if len(by.get("search", "")) > 2:
|
|
||||||
q = q.filter(Reaction.body.ilike(f'%{by["body"]}%'))
|
|
||||||
|
|
||||||
if by.get("after"):
|
|
||||||
after = int(time.time()) - int(by.get("after", 0))
|
|
||||||
q = q.filter(Reaction.created_at > after)
|
|
||||||
|
|
||||||
order_way = asc if by.get("sort", "").startswith("-") else desc
|
|
||||||
order_field = by.get("sort", "").replace("-", "") or "created_at"
|
|
||||||
q = q.group_by(Reaction.id, Author.id, Shout.id).order_by(order_way(order_field))
|
|
||||||
q = add_reaction_stat_columns(q)
|
q = add_reaction_stat_columns(q)
|
||||||
|
q = apply_reaction_filters(by, q)
|
||||||
q = q.where(Reaction.deleted_at.is_(None))
|
q = q.where(Reaction.deleted_at.is_(None))
|
||||||
q = q.limit(limit).offset(offset)
|
q = q.limit(limit).offset(offset)
|
||||||
reactions = []
|
reactions = []
|
||||||
session = info.context["session"]
|
|
||||||
for [
|
for [
|
||||||
reaction,
|
reaction,
|
||||||
author,
|
author,
|
||||||
|
@ -379,7 +387,7 @@ async def load_reactions_by(_, info, by, limit=50, offset=0):
|
||||||
reacted_stat,
|
reacted_stat,
|
||||||
commented_stat,
|
commented_stat,
|
||||||
rating_stat,
|
rating_stat,
|
||||||
] in session.execute(q):
|
] in local_session().execute(q):
|
||||||
reaction.created_by = author
|
reaction.created_by = author
|
||||||
reaction.shout = shout
|
reaction.shout = shout
|
||||||
reaction.stat = {
|
reaction.stat = {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user