create-reaction-debug-6

This commit is contained in:
Untone 2024-01-23 01:11:34 +03:00
parent 31f2414064
commit 257ff43eaa

View File

@ -165,7 +165,6 @@ def set_hidden(session, shout_id):
session.add(s) session.add(s)
session.commit() session.commit()
@mutation.field("create_reaction") @mutation.field("create_reaction")
@login_required @login_required
async def create_reaction(_, info, reaction): async def create_reaction(_, info, reaction):
@ -183,44 +182,47 @@ async def create_reaction(_, info, reaction):
if shout and author: if shout and author:
reaction["created_by"] = author.id reaction["created_by"] = author.id
kind = reaction.get("kind")
if reaction["kind"] in [ReactionKind.DISLIKE.value, ReactionKind.LIKE.value]: if not kind and reaction.get("body"):
existing_reaction = ( kind = ReactionKind.COMMENT.value
session.query(Reaction) if not kind:
.filter( return { "error": "cannot create reaction with this kind"}
and_( existing_reaction = (
Reaction.shout == reaction["shout"], session.query(Reaction)
Reaction.created_by == author.id, .filter(
Reaction.kind == reaction["kind"], and_(
Reaction.reply_to == reaction.get("reply_to"), Reaction.shout == shout_id,
) Reaction.created_by == author.id,
Reaction.kind == kind,
Reaction.reply_to == reaction.get("reply_to"),
) )
.first()
) )
.first()
)
if existing_reaction is not None: if existing_reaction is not None:
return {"error": "You can't vote twice"} return {"error": "You can't vote twice"}
opposite_reaction_kind = ( opposite_reaction_kind = (
ReactionKind.DISLIKE.value ReactionKind.DISLIKE.value
if reaction["kind"] == ReactionKind.LIKE.value if reaction["kind"] == ReactionKind.LIKE.value
else ReactionKind.LIKE.value else ReactionKind.LIKE.value
) )
opposite_reaction = ( opposite_reaction = (
session.query(Reaction) session.query(Reaction)
.filter( .filter(
and_( and_(
Reaction.shout == reaction["shout"], Reaction.shout == reaction["shout"],
Reaction.created_by == author.id, Reaction.created_by == author.id,
Reaction.kind == opposite_reaction_kind, Reaction.kind == opposite_reaction_kind,
Reaction.reply_to == reaction.get("reply_to"), Reaction.reply_to == reaction.get("reply_to"),
)
) )
.first()
) )
.first()
)
if opposite_reaction is not None: if opposite_reaction is not None:
session.delete(opposite_reaction) session.delete(opposite_reaction)
r = Reaction(**reaction) r = Reaction(**reaction)
rdict = r.dict() rdict = r.dict()
@ -245,6 +247,7 @@ async def create_reaction(_, info, reaction):
session.commit() session.commit()
logger.debug(r) logger.debug(r)
rdict = r.dict() rdict = r.dict()
# Self-regulation mechanics # Self-regulation mechanics
if check_to_hide(session, r): if check_to_hide(session, r):
set_hidden(session, r.shout) set_hidden(session, r.shout)
@ -308,8 +311,8 @@ async def update_reaction(_, info, rid, reaction):
return {"reaction": r} return {"reaction": r}
else: else:
return {"error": "user"} return {"error": "not authorized"}
return {"error": "cannot create reaction"}
@mutation.field("delete_reaction") @mutation.field("delete_reaction")
@login_required @login_required