From 334148b26076ca33bb93d5dd98d7bac693b18b34 Mon Sep 17 00:00:00 2001 From: Luke Oldenburg <87272260+Luke-Oldenburg@users.noreply.github.com> Date: Sun, 23 Nov 2025 20:55:42 +0000 Subject: [PATCH 1/2] [Schema] Uniquely index `event_configurations` by `event_id` --- app/models/event/configuration.rb | 2 +- ...d_unique_index_to_event_configurations_on_event_id.rb | 9 +++++++++ db/schema.rb | 4 ++-- 3 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 db/migrate/20251123205131_add_unique_index_to_event_configurations_on_event_id.rb diff --git a/app/models/event/configuration.rb b/app/models/event/configuration.rb index 505c00277e..a2fe7e0547 100644 --- a/app/models/event/configuration.rb +++ b/app/models/event/configuration.rb @@ -16,7 +16,7 @@ # # Indexes # -# index_event_configurations_on_event_id (event_id) +# index_event_configurations_on_event_id (event_id) UNIQUE # # Foreign Keys # diff --git a/db/migrate/20251123205131_add_unique_index_to_event_configurations_on_event_id.rb b/db/migrate/20251123205131_add_unique_index_to_event_configurations_on_event_id.rb new file mode 100644 index 0000000000..7c46684d83 --- /dev/null +++ b/db/migrate/20251123205131_add_unique_index_to_event_configurations_on_event_id.rb @@ -0,0 +1,9 @@ +class AddUniqueIndexToEventConfigurationsOnEventId < ActiveRecord::Migration[8.0] + disable_ddl_transaction! + + def change + remove_index :event_configurations, :event_id + + add_index :event_configurations, :event_id, unique: true, algorithm: :concurrently + end +end diff --git a/db/schema.rb b/db/schema.rb index e64679648f..bf7bf027f9 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -12,7 +12,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.0].define(version: 2025_11_15_104532) do +ActiveRecord::Schema[8.0].define(version: 2025_11_23_205131) do create_schema "google_sheets" # These are extensions that must be enabled in order to support this database @@ -937,7 +937,7 @@ t.boolean "generate_monthly_announcement", default: false, null: false t.string "subevent_plan" t.datetime "updated_at", null: false - t.index ["event_id"], name: "index_event_configurations_on_event_id" + t.index ["event_id"], name: "index_event_configurations_on_event_id", unique: true end create_table "event_follows", force: :cascade do |t| From c9f23bc708fd4f7e4d965ca288dcd236e78c19ab Mon Sep 17 00:00:00 2001 From: Luke Oldenburg <87272260+Luke-Oldenburg@users.noreply.github.com> Date: Sun, 23 Nov 2025 20:56:05 +0000 Subject: [PATCH 2/2] Add rails validation --- app/models/event/configuration.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/models/event/configuration.rb b/app/models/event/configuration.rb index a2fe7e0547..741135c631 100644 --- a/app/models/event/configuration.rb +++ b/app/models/event/configuration.rb @@ -30,6 +30,7 @@ class Configuration < ApplicationRecord validates_email_format_of :contact_email, allow_nil: true, allow_blank: true normalizes :contact_email, with: ->(contact_email) { contact_email.strip.downcase } validates :subevent_plan, inclusion: { in: -> { Event::Plan.available_plans.map(&:name) } }, allow_blank: true + validates :event, uniqueness: true after_save :create_or_destroy_monthly_announcement