From 7ce59398c45b11178a388647fcd25e30297500e6 Mon Sep 17 00:00:00 2001 From: Luna Mendes Date: Sun, 4 Nov 2018 23:41:52 -0300 Subject: [PATCH] channels: use UPSERT on channel_ack --- litecord/blueprints/channels.py | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/litecord/blueprints/channels.py b/litecord/blueprints/channels.py index 2259b3e..c3cb7dc 100644 --- a/litecord/blueprints/channels.py +++ b/litecord/blueprints/channels.py @@ -134,6 +134,7 @@ async def guild_cleanup(channel_id): @bp.route('/', methods=['DELETE']) async def close_channel(channel_id): + """Close or delete a channel.""" user_id = await token_check() chan_type = await app.storage.get_chan_type(channel_id) @@ -210,7 +211,7 @@ async def close_channel(channel_id): # TODO: group dm pass - return '', 404 + raise ChannelNotFound() @bp.route('//pins', methods=['GET']) @@ -320,21 +321,16 @@ async def channel_ack(user_id, guild_id, channel_id, message_id: int = None): if not message_id: message_id = await app.storage.chan_last_message(channel_id) - res = await app.db.execute(""" - UPDATE user_read_state - - SET last_message_id = $1, - mention_count = 0 - - WHERE user_id = $2 AND channel_id = $3 - """, message_id, user_id, channel_id) - - if res == 'UPDATE 0': - await app.db.execute(""" - INSERT INTO user_read_state - (user_id, channel_id, last_message_id, mention_count) - VALUES ($1, $2, $3, $4) - """, user_id, channel_id, message_id, 0) + await app.db.execute(""" + INSERT INTO user_read_state + (user_id, channel_id, last_message_id, mention_count) + VALUES + ($1, $2, $3, 0) + ON CONFLICT + DO UPDATE user_read_state + SET last_message_id = $3, mention_count = 0 + WHERE user_id = $1 AND channel_id = $2 + """, user_id, channel_id, message_id) if guild_id: await app.dispatcher.dispatch_user_guild( @@ -353,6 +349,7 @@ async def channel_ack(user_id, guild_id, channel_id, message_id: int = None): @bp.route('//messages//ack', methods=['POST']) async def ack_channel(channel_id, message_id): + """Acknowledge a channel.""" user_id = await token_check() ctype, guild_id = await channel_check(user_id, channel_id) @@ -371,6 +368,7 @@ async def ack_channel(channel_id, message_id): @bp.route('//messages/ack', methods=['DELETE']) async def delete_read_state(channel_id): + """Delete the read state of a channel.""" user_id = await token_check() await channel_check(user_id, channel_id)