From 077dc25a5d9e40c2ed8818a80ac35466dc99ac84 Mon Sep 17 00:00:00 2001 From: Brad Brown Date: Tue, 5 Jul 2022 15:57:34 -0500 Subject: [PATCH] Fix update logic --- wordlinator/db/pg.py | 19 ++++++++++++++++--- wordlinator/utils/scores.py | 7 +++++-- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/wordlinator/db/pg.py b/wordlinator/db/pg.py index 0b5c4d1..976d5e4 100644 --- a/wordlinator/db/pg.py +++ b/wordlinator/db/pg.py @@ -216,12 +216,16 @@ class WordleDb: Score.select( Score, Hole.hole, + Hole.hole_id, + Game.game_id, User.username, + User.user_id, Player.game_id, ) .join(Player, on=(Score.user_id == Player.user_id)) .switch(Score) .join(Hole, on=(Score.hole_id == Hole.hole_id)) + .join(Game, on=(Hole.game_id == Game.game_id)) .switch(Score) .join(User, on=(Score.user_id == User.user_id)) .filter(Player.game_id == round.game_id) @@ -235,9 +239,18 @@ class WordleDb: Score.insert_many(batch).execute() def bulk_update_scores(self, scores: typing.List[Score]): - with db.atomic(): - for score in scores: - score.save() + query_str = """UPDATE score + SET score = {score}, tweet_id = {tweet_id} + WHERE user_id = {user_id} AND game_id = {game_id} AND hole_id = {hole_id}""" + for score in scores: + query = query_str.format( + score=score.score, + tweet_id=score.tweet_id or "NULL", + user_id=score.user_id.user_id, + game_id=score.game_id.game_id, + hole_id=score.hole_id.hole_id, + ) + db.execute_sql(query) def get_users_without_score(self, round_no, hole_no, tweetable=True): hole = self.get_or_create_hole(round_no, hole_no) diff --git a/wordlinator/utils/scores.py b/wordlinator/utils/scores.py index 7ee2e16..d63ec23 100644 --- a/wordlinator/utils/scores.py +++ b/wordlinator/utils/scores.py @@ -154,9 +154,12 @@ class UserRow(ScoreRow): ) else: saved_score = score_match[0] - if saved_score.score != score or saved_score.tweet_id != tweet_id: + if saved_score.score != score or ( + tweet_id and saved_score.tweet_id != tweet_id + ): saved_score.score = score - saved_score.tweet_id = tweet_id + if tweet_id: + saved_score.tweet_id = tweet_id results["update"].append(saved_score) return results