diff --git a/src/stats.py b/src/stats.py index 16c522c..84f06e3 100644 --- a/src/stats.py +++ b/src/stats.py @@ -85,7 +85,8 @@ def update_user_statistics(): # Note that this will immediately be changed by the next query in case it is nonzero, # so the zero value never shows up in the database if it was nonzero before. cur.execute( - "INSERT INTO user_statistics (user_id, variant_type, total_game_moves, games_played, games_won, current_streak)" + "INSERT INTO user_statistics" + " (user_id, variant_type, total_game_moves, games_played, games_won, current_streak)" " (" " SELECT id, %s, 0, 0, 0, 0 FROM users" " )" @@ -96,45 +97,31 @@ def update_user_statistics(): " (EXCLUDED.total_game_moves, EXCLUDED.games_played, EXCLUDED.games_won, EXCLUDED.current_streak)", (rating_type,) ) - cur.execute( - "INSERT INTO user_statistics (user_id, variant_type, total_game_moves)" - " (" - " SELECT users.id, %s, SUM(games.num_turns) FROM users " - " INNER JOIN game_participants " - " ON game_participants.user_id = users.id " - " INNER JOIN games " - " ON game_participants.game_id = games.id " - " INNER JOIN variants" - " ON variants.id = games.variant_id " - " WHERE variants.clue_starved = %s" - " GROUP BY users.id " - " ) " - "ON CONFLICT (user_id, variant_type) DO UPDATE " - "SET total_game_moves = EXCLUDED.total_game_moves", - (rating_type, clue_starved) - ) - cur.execute( - "INSERT INTO user_statistics (user_id, variant_type, games_played, games_won)" - " (" - " SELECT" - " users.id," - " %s," - " COUNT(games.id)," - " COUNT(games.id) FILTER ( WHERE variants.num_suits * 5 = games.score )" - " FROM users " - " INNER JOIN game_participants " - " ON game_participants.user_id = users.id " - " INNER JOIN games " - " ON game_participants.game_id = games.id " - " INNER JOIN variants " - " ON variants.id = games.variant_id " - " WHERE variants.clue_starved = %s" - " GROUP BY users.id" - " )" - "ON CONFLICT (user_id, variant_type) DO UPDATE " - "SET (games_played, games_won) = (EXCLUDED.games_played, EXCLUDED.games_won)", - (rating_type, clue_starved) - ) + cur.execute( + "INSERT INTO user_statistics (user_id, variant_type, total_game_moves, games_played, games_won)" + " (" + " SELECT" + " users.id," + " CASE WHEN clue_starved THEN %s ELSE %s END," + " SUM(games.num_turns)," + " COUNT(*)," + " COUNT(*) FILTER ( WHERE variants.num_suits * 5 = games.score )" + "FROM users" + " INNER JOIN game_participants " + " ON game_participants.user_id = users.id " + " INNER JOIN games " + " ON game_participants.game_id = games.id " + " INNER JOIN variants" + " ON variants.id = games.variant_id " + " GROUP BY users.id, clue_starved " + " ) " + "ON CONFLICT (user_id, variant_type) DO UPDATE " + "SET" + " (total_game_moves, games_played, games_won)" + " =" + " (EXCLUDED.total_game_moves, EXCLUDED.games_played, EXCLUDED.games_won)", + (utils.get_rating_type(True), utils.get_rating_type(False)) + ) cur.execute( "INSERT INTO user_statistics (user_id, variant_type, current_streak)" " ("