From 9d68367a5a8f8c9aca56d6ec2701183ba19d6c71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=BF=E3=81=A6=E3=82=8B=E3=81=9E?= Date: Tue, 27 Jan 2026 00:43:52 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20user=5Fips=20=E3=81=AE=20id=20=E3=82=92?= =?UTF-8?q?=E5=89=8A=E9=99=A4=EF=BC=88#231=EF=BC=89=20(#238)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #231 Co-authored-by: miteruzo Reviewed-on: https://git.miteruzo.com/miteruzo/btrc-hub/pulls/238 --- backend/app/models/user_ip.rb | 2 + ...7000900_change_user_ips_to_composite_pk.rb | 47 +++++++++++++++++++ backend/db/schema.rb | 5 +- 3 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 backend/db/migrate/20260127000900_change_user_ips_to_composite_pk.rb diff --git a/backend/app/models/user_ip.rb b/backend/app/models/user_ip.rb index 80cf47d..61d2685 100644 --- a/backend/app/models/user_ip.rb +++ b/backend/app/models/user_ip.rb @@ -1,4 +1,6 @@ class UserIp < ApplicationRecord + self.primary_key = :user_id, :ip_address_id + belongs_to :user belongs_to :ip_address diff --git a/backend/db/migrate/20260127000900_change_user_ips_to_composite_pk.rb b/backend/db/migrate/20260127000900_change_user_ips_to_composite_pk.rb new file mode 100644 index 0000000..be525e2 --- /dev/null +++ b/backend/db/migrate/20260127000900_change_user_ips_to_composite_pk.rb @@ -0,0 +1,47 @@ +class ChangeUserIpsToCompositePk < ActiveRecord::Migration[8.0] + def up + execute <<~SQL + ALTER TABLE + user_ips + MODIFY COLUMN id BIGINT NOT NULL + ; + SQL + + execute <<~SQL + ALTER TABLE + user_ips + DROP PRIMARY KEY + ; + SQL + + remove_column :user_ips, :id + + execute <<~SQL + ALTER TABLE + user_ips + ADD PRIMARY KEY (user_id, ip_address_id) + ; + SQL + + remove_index :user_ips, name: 'index_user_ips_on_user_id' + end + + def down + execute <<~SQL + ALTER TABLE + user_ips + DROP PRIMARY KEY + ; + SQL + + execute <<~SQL + ALTER TABLE + user_ips + ADD COLUMN id BIGINT NOT NULL AUTO_INCREMENT FIRST + , ADD PRIMARY KEY (id) + ; + SQL + + add_index :user_ips, :user_id, name: 'index_user_ips_on_user_id' + end +end diff --git a/backend/db/schema.rb b/backend/db/schema.rb index 180735e..7ae8e2e 100644 --- a/backend/db/schema.rb +++ b/backend/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.0].define(version: 2026_01_26_124100) do +ActiveRecord::Schema[8.0].define(version: 2026_01_27_000900) do create_table "active_storage_attachments", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| t.string "name", null: false t.string "record_type", null: false @@ -144,13 +144,12 @@ ActiveRecord::Schema[8.0].define(version: 2026_01_26_124100) do t.index ["tag_name_id"], name: "index_tags_on_tag_name_id", unique: true end - create_table "user_ips", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + create_table "user_ips", primary_key: ["user_id", "ip_address_id"], charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| t.bigint "user_id", null: false t.bigint "ip_address_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["ip_address_id"], name: "index_user_ips_on_ip_address_id" - t.index ["user_id"], name: "index_user_ips_on_user_id" end create_table "user_post_views", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|