diff --git a/app/models/canonical_event_mapping.rb b/app/models/canonical_event_mapping.rb index 07978a2825..8e4ced2877 100644 --- a/app/models/canonical_event_mapping.rb +++ b/app/models/canonical_event_mapping.rb @@ -14,7 +14,7 @@ # # Indexes # -# index_canonical_event_mappings_on_canonical_transaction_id (canonical_transaction_id) +# index_canonical_event_mappings_on_canonical_transaction_id (canonical_transaction_id) UNIQUE # index_canonical_event_mappings_on_event_id (event_id) # index_canonical_event_mappings_on_subledger_id (subledger_id) # index_canonical_event_mappings_on_user_id (user_id) diff --git a/app/models/canonical_pending_event_mapping.rb b/app/models/canonical_pending_event_mapping.rb index 60ca88fcf0..10503434cb 100644 --- a/app/models/canonical_pending_event_mapping.rb +++ b/app/models/canonical_pending_event_mapping.rb @@ -13,9 +13,10 @@ # # Indexes # -# index_canonical_pending_event_map_on_canonical_pending_tx_id (canonical_pending_transaction_id) +# index_canonical_pending_event_map_on_canonical_pending_tx_id (canonical_pending_transaction_id) UNIQUE # index_canonical_pending_event_mappings_on_event_id (event_id) # index_canonical_pending_event_mappings_on_subledger_id (subledger_id) +# index_cpem_event_id_cpt_id_uniqueness (event_id,canonical_pending_transaction_id) UNIQUE # # Foreign Keys # diff --git a/db/migrate/20260719120000_add_unique_index_to_canonical_event_mappings_on_canonical_transaction_id.rb b/db/migrate/20260719120000_add_unique_index_to_canonical_event_mappings_on_canonical_transaction_id.rb new file mode 100644 index 0000000000..cadcb088d9 --- /dev/null +++ b/db/migrate/20260719120000_add_unique_index_to_canonical_event_mappings_on_canonical_transaction_id.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class AddUniqueIndexToCanonicalEventMappingsOnCanonicalTransactionId < ActiveRecord::Migration[8.0] + disable_ddl_transaction! + + def change + remove_index :canonical_event_mappings, :canonical_transaction_id + + add_index :canonical_event_mappings, :canonical_transaction_id, unique: true, algorithm: :concurrently + end +end diff --git a/db/migrate/20260719120001_add_unique_index_to_canonical_pending_event_mappings_on_cpt_id.rb b/db/migrate/20260719120001_add_unique_index_to_canonical_pending_event_mappings_on_cpt_id.rb new file mode 100644 index 0000000000..54d215660f --- /dev/null +++ b/db/migrate/20260719120001_add_unique_index_to_canonical_pending_event_mappings_on_cpt_id.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class AddUniqueIndexToCanonicalPendingEventMappingsOnCptId < ActiveRecord::Migration[8.0] + disable_ddl_transaction! + + def change + remove_index :canonical_pending_event_mappings, :canonical_pending_transaction_id + + add_index :canonical_pending_event_mappings, :canonical_pending_transaction_id, unique: true, name: "index_canonical_pending_event_map_on_canonical_pending_tx_id", algorithm: :concurrently + end +end diff --git a/db/migrate/20260719120002_add_unique_index_to_canonical_pending_event_mappings_on_event_id_and_cpt_id.rb b/db/migrate/20260719120002_add_unique_index_to_canonical_pending_event_mappings_on_event_id_and_cpt_id.rb new file mode 100644 index 0000000000..5e43bc4efb --- /dev/null +++ b/db/migrate/20260719120002_add_unique_index_to_canonical_pending_event_mappings_on_event_id_and_cpt_id.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddUniqueIndexToCanonicalPendingEventMappingsOnEventIdAndCptId < ActiveRecord::Migration[8.0] + disable_ddl_transaction! + + def change + add_index :canonical_pending_event_mappings, [:event_id, :canonical_pending_transaction_id], unique: true, name: "index_cpem_event_id_cpt_id_uniqueness", algorithm: :concurrently + end +end diff --git a/db/schema.rb b/db/schema.rb index 72d9ac95f5..2769f57d60 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: 2026_07_16_120000) do +ActiveRecord::Schema[8.0].define(version: 2026_07_19_120002) do create_schema "google_sheets" # These are extensions that must be enabled in order to support this database @@ -336,7 +336,7 @@ t.bigint "subledger_id" t.datetime "updated_at", null: false t.bigint "user_id" - t.index ["canonical_transaction_id"], name: "index_canonical_event_mappings_on_canonical_transaction_id" + t.index ["canonical_transaction_id"], name: "index_canonical_event_mappings_on_canonical_transaction_id", unique: true t.index ["event_id", "canonical_transaction_id"], name: "index_cem_event_id_canonical_transaction_id_uniqueness", unique: true t.index ["event_id"], name: "index_canonical_event_mappings_on_event_id" t.index ["subledger_id"], name: "index_canonical_event_mappings_on_subledger_id" @@ -365,7 +365,8 @@ t.bigint "event_id", null: false t.bigint "subledger_id" t.datetime "updated_at", null: false - t.index ["canonical_pending_transaction_id"], name: "index_canonical_pending_event_map_on_canonical_pending_tx_id" + t.index ["canonical_pending_transaction_id"], name: "index_canonical_pending_event_map_on_canonical_pending_tx_id", unique: true + t.index ["event_id", "canonical_pending_transaction_id"], name: "index_cpem_event_id_cpt_id_uniqueness", unique: true t.index ["event_id"], name: "index_canonical_pending_event_mappings_on_event_id" t.index ["subledger_id"], name: "index_canonical_pending_event_mappings_on_subledger_id" end