From 4479314554178333672aab0568b34b15d118a185 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Komendarczuk?= Date: Tue, 16 Jun 2026 12:29:56 +0200 Subject: [PATCH 1/2] Preventing duplication of game rating logs --- lib/teiserver/game/libs/match_rating_lib.ex | 5 ++++- ...0260616101633_unique_index_rating_logs.exs | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 priv/repo/migrations/20260616101633_unique_index_rating_logs.exs diff --git a/lib/teiserver/game/libs/match_rating_lib.ex b/lib/teiserver/game/libs/match_rating_lib.ex index 8a63f326a..112a5774d 100644 --- a/lib/teiserver/game/libs/match_rating_lib.ex +++ b/lib/teiserver/game/libs/match_rating_lib.ex @@ -741,7 +741,10 @@ defmodule Teiserver.Game.MatchRatingLib do |> Repo.transaction() else Multi.new() - |> Multi.insert_all(:insert_all, RatingLog, all_ratings) + |> Multi.insert_all(:insert_all, RatingLog, all_ratings, + on_conflict: :nothing, + conflict_target: [:match_id, :user_id, :rating_type_id] + ) |> Repo.transaction() end end diff --git a/priv/repo/migrations/20260616101633_unique_index_rating_logs.exs b/priv/repo/migrations/20260616101633_unique_index_rating_logs.exs new file mode 100644 index 000000000..514f5e503 --- /dev/null +++ b/priv/repo/migrations/20260616101633_unique_index_rating_logs.exs @@ -0,0 +1,22 @@ +defmodule Teiserver.Repo.Migrations.UniqueIndexRatingLogs do + use Ecto.Migration + + def up do + # Remove duplicate entries keeping the earliest + # (lowest id) per (match_id, user_id, rating_type_id) + execute(""" + DELETE FROM teiserver_game_rating_logs + WHERE id NOT IN ( + SELECT DISTINCT ON (match_id, user_id, rating_type_id) id + FROM teiserver_game_rating_logs + ORDER BY match_id, user_id, rating_type_id, id ASC + ) + """) + + create unique_index(:teiserver_game_rating_logs, [:match_id, :user_id, :rating_type_id]) + end + + def down do + drop unique_index(:teiserver_game_rating_logs, [:match_id, :user_id, :rating_type_id]) + end +end From ab1efc15bbe0868e4cf5b3c16dc9e838f277cdac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Komendarczuk?= Date: Tue, 16 Jun 2026 12:37:48 +0200 Subject: [PATCH 2/2] fix credo --- .../repo/migrations/20260616101633_unique_index_rating_logs.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/priv/repo/migrations/20260616101633_unique_index_rating_logs.exs b/priv/repo/migrations/20260616101633_unique_index_rating_logs.exs index 514f5e503..52f9c8f9c 100644 --- a/priv/repo/migrations/20260616101633_unique_index_rating_logs.exs +++ b/priv/repo/migrations/20260616101633_unique_index_rating_logs.exs @@ -2,7 +2,7 @@ defmodule Teiserver.Repo.Migrations.UniqueIndexRatingLogs do use Ecto.Migration def up do - # Remove duplicate entries keeping the earliest + # Remove duplicate entries keeping the earliest # (lowest id) per (match_id, user_id, rating_type_id) execute(""" DELETE FROM teiserver_game_rating_logs