From 753bdc5dc80e03bc76126c9f6e093903f0fef2bf Mon Sep 17 00:00:00 2001 From: rhymes Date: Fri, 5 Jun 2020 09:19:22 +0200 Subject: [PATCH] Add missing unique indexes to notifications (#8273) --- .rubocop_todo.yml | 1 - ...er_id_organization_id_notifiable_action.rb | 19 +++++++++++++++++++ db/schema.rb | 3 ++- 3 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20200604133925_add_unique_index_to_notifications_user_id_organization_id_notifiable_action.rb diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index cfdbf9db5..eb89c356c 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -82,7 +82,6 @@ Rails/UniqueValidationWithoutIndex: - 'app/models/article.rb' - 'app/models/comment.rb' - 'app/models/follow.rb' - - 'app/models/notification.rb' - 'app/models/broadcast.rb' # Offense count: 33 diff --git a/db/migrate/20200604133925_add_unique_index_to_notifications_user_id_organization_id_notifiable_action.rb b/db/migrate/20200604133925_add_unique_index_to_notifications_user_id_organization_id_notifiable_action.rb new file mode 100644 index 000000000..0fbc6181b --- /dev/null +++ b/db/migrate/20200604133925_add_unique_index_to_notifications_user_id_organization_id_notifiable_action.rb @@ -0,0 +1,19 @@ +class AddUniqueIndexToNotificationsUserIdOrganizationIdNotifiableAction < ActiveRecord::Migration[6.0] + disable_ddl_transaction! + + def change + return if index_exists?( + :notifications, + %i[user_id organization_id notifiable_id notifiable_type action], + name: :index_notifications_user_id_organization_id_notifiable_action + ) + + add_index( + :notifications, + %i[user_id organization_id notifiable_id notifiable_type action], + unique: true, + algorithm: :concurrently, + name: :index_notifications_user_id_organization_id_notifiable_action + ) + end +end diff --git a/db/schema.rb b/db/schema.rb index 8673b193f..b92dc53d1 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2020_06_02_174329) do +ActiveRecord::Schema.define(version: 2020_06_04_133925) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -683,6 +683,7 @@ ActiveRecord::Schema.define(version: 2020_06_02_174329) do t.index ["organization_id"], name: "index_notifications_on_organization_id" t.index ["user_id", "notifiable_id", "notifiable_type", "action"], name: "index_notifications_on_user_notifiable_and_action_not_null", unique: true, where: "(action IS NOT NULL)" t.index ["user_id", "notifiable_id", "notifiable_type"], name: "index_notifications_on_user_notifiable_action_is_null", unique: true, where: "(action IS NULL)" + t.index ["user_id", "organization_id", "notifiable_id", "notifiable_type", "action"], name: "index_notifications_user_id_organization_id_notifiable_action", unique: true t.index ["user_id"], name: "index_notifications_on_user_id" end