From 807f0458b92072902316091fc633127e37d36297 Mon Sep 17 00:00:00 2001 From: Martin Artnik Date: Wed, 20 Aug 2025 10:46:56 +0200 Subject: [PATCH] Add unique constraint to user assignments [SCI-12284] --- ...d_unique_constraint_to_user_assignments.rb | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 db/migrate/20250707080046_add_unique_constraint_to_user_assignments.rb diff --git a/db/migrate/20250707080046_add_unique_constraint_to_user_assignments.rb b/db/migrate/20250707080046_add_unique_constraint_to_user_assignments.rb new file mode 100644 index 000000000..90e615d96 --- /dev/null +++ b/db/migrate/20250707080046_add_unique_constraint_to_user_assignments.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +class AddUniqueConstraintToUserAssignments < ActiveRecord::Migration[7.2] + def up + # delete the duplicates + execute( + 'WITH uniq AS + (SELECT DISTINCT ON (user_id, assignable_type, assignable_id, team_id) * FROM user_assignments) + DELETE FROM user_assignments WHERE user_assignments.id NOT IN + (SELECT id FROM uniq)' + ) + + remove_index :user_assignments, name: 'index_user_assignments_on_assignable' + add_index :user_assignments, + %i(assignable_type assignable_id user_id team_id), + unique: true, + name: 'index_user_assignments_on_unique_assignable_in_team' + end + + def down + add_index :user_assignments, %i(assignable_type assignable_id), name: 'index_user_assignments_on_assignable' + remove_index :user_assignments, name: 'index_user_assignments_on_unique_assignable_in_team' + end +end