Add organization_users table
What does this MR do and why?
This table represents users with access to an organization.
The user_id
foreign key is added in a separate migration as per our database guideline https://docs.gitlab.com/ee/development/migration_style_guide.html#creating-a-new-table-when-we-have-two-foreign-keys.
Migration output
UP
bin/rails db:migrate
main: == [advisory_lock_connection] object_id: 228780, pg_backend_pid: 22629
main: == 20230608113106 CreateOrganizationUsers: migrating ==========================
main: -- create_table(:organization_users)
main: -> 0.0142s
main: == 20230608113106 CreateOrganizationUsers: migrated (0.1686s) =================
main: == 20230615104902 AddUserIdForeignKeyToOrganizationUsers: migrating ===========
main: -- transaction_open?()
main: -> 0.0000s
main: -- transaction_open?()
main: -> 0.0000s
main: -- execute("ALTER TABLE organization_users ADD CONSTRAINT fk_8d9b20725d FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE NOT VALID;")
main: -> 0.0026s
main: -- execute("SET statement_timeout TO 0")
main: -> 0.0007s
main: -- execute("ALTER TABLE organization_users VALIDATE CONSTRAINT fk_8d9b20725d;")
main: -> 0.0024s
main: -- execute("RESET statement_timeout")
main: -> 0.0005s
main: == 20230615104902 AddUserIdForeignKeyToOrganizationUsers: migrated (0.0378s) ==
main: == 20230620104217 AddOrganizationIdForeignKeyToOrganizationUsers: migrating ===
main: -- transaction_open?()
main: -> 0.0000s
main: -- transaction_open?()
main: -> 0.0000s
main: -- execute("ALTER TABLE organization_users ADD CONSTRAINT fk_8471abad75 FOREIGN KEY (organization_id) REFERENCES organizations (id) ON DELETE CASCADE NOT VALID;")
main: -> 0.0013s
main: -- execute("ALTER TABLE organization_users VALIDATE CONSTRAINT fk_8471abad75;")
main: -> 0.0008s
main: == 20230620104217 AddOrganizationIdForeignKeyToOrganizationUsers: migrated (0.0220s)
main: == [advisory_lock_connection] object_id: 228780, pg_backend_pid: 22629
ci: == [advisory_lock_connection] object_id: 229260, pg_backend_pid: 22631
ci: == 20230608113106 CreateOrganizationUsers: migrating ==========================
ci: -- create_table(:organization_users)
ci: -> 0.0109s
ci: == 20230608113106 CreateOrganizationUsers: migrated (0.0224s) =================
ci: == 20230615104902 AddUserIdForeignKeyToOrganizationUsers: migrating ===========
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- execute("ALTER TABLE organization_users ADD CONSTRAINT fk_8d9b20725d FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE NOT VALID;")
ci: -> 0.0022s
ci: -- execute("SET statement_timeout TO 0")
ci: -> 0.0003s
ci: -- execute("ALTER TABLE organization_users VALIDATE CONSTRAINT fk_8d9b20725d;")
ci: -> 0.0106s
ci: -- execute("RESET statement_timeout")
ci: -> 0.0007s
ci: == 20230615104902 AddUserIdForeignKeyToOrganizationUsers: migrated (0.0400s) ==
ci: == 20230620104217 AddOrganizationIdForeignKeyToOrganizationUsers: migrating ===
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- execute("ALTER TABLE organization_users ADD CONSTRAINT fk_8471abad75 FOREIGN KEY (organization_id) REFERENCES organizations (id) ON DELETE CASCADE NOT VALID;")
ci: -> 0.0008s
ci: -- execute("ALTER TABLE organization_users VALIDATE CONSTRAINT fk_8471abad75;")
ci: -> 0.0007s
ci: == 20230620104217 AddOrganizationIdForeignKeyToOrganizationUsers: migrated (0.0390s)
ci: == [advisory_lock_connection] object_id: 229260, pg_backend_pid: 22631
DOWN
(arm64) ➜ gitlab git:(415418-user-access-org) bin/rails db:migrate:down:main VERSION=20230620104217 && bin/rails db:migrate:down:ci VERSION=20230620104217
main: == [advisory_lock_connection] object_id: 228500, pg_backend_pid: 26865
main: == 20230620104217 AddOrganizationIdForeignKeyToOrganizationUsers: reverting ===
main: -- transaction_open?()
main: -> 0.0001s
main: -- remove_foreign_key(:organization_users, {:column=>:organization_id})
main: -> 0.0896s
main: == 20230620104217 AddOrganizationIdForeignKeyToOrganizationUsers: reverted (0.1370s)
main: == [advisory_lock_connection] object_id: 228500, pg_backend_pid: 26865
ci: == [advisory_lock_connection] object_id: 228440, pg_backend_pid: 27302
ci: == 20230620104217 AddOrganizationIdForeignKeyToOrganizationUsers: reverting ===
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- remove_foreign_key(:organization_users, {:column=>:organization_id})
ci: -> 0.1240s
ci: == 20230620104217 AddOrganizationIdForeignKeyToOrganizationUsers: reverted (0.1548s)
ci: == [advisory_lock_connection] object_id: 228440, pg_backend_pid: 27302
(arm64) ➜ gitlab git:(415418-user-access-org) ✗ bin/rails db:migrate:down:main VERSION=20230615104902 && bin/rails db:migrate:down:ci VERSION=20230615104902
main: == [advisory_lock_connection] object_id: 228460, pg_backend_pid: 27731
main: == 20230615104902 AddUserIdForeignKeyToOrganizationUsers: reverting ===========
main: -- transaction_open?()
main: -> 0.0000s
main: -- remove_foreign_key(:organization_users, {:column=>:user_id})
main: -> 0.1187s
main: == 20230615104902 AddUserIdForeignKeyToOrganizationUsers: reverted (0.1480s) ==
main: == [advisory_lock_connection] object_id: 228460, pg_backend_pid: 27731
ci: == [advisory_lock_connection] object_id: 228460, pg_backend_pid: 28146
ci: == 20230615104902 AddUserIdForeignKeyToOrganizationUsers: reverting ===========
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- remove_foreign_key(:organization_users, {:column=>:user_id})
ci: -> 0.1333s
ci: == 20230615104902 AddUserIdForeignKeyToOrganizationUsers: reverted (0.1630s) ==
ci: == [advisory_lock_connection] object_id: 228460, pg_backend_pid: 28146
(arm64) ➜ gitlab git:(415418-user-access-org) ✗ bin/rails db:migrate:down:main VERSION=20230608113106 && bin/rails db:migrate:down:ci VERSION=20230608113106
main: == [advisory_lock_connection] object_id: 228460, pg_backend_pid: 28585
main: == 20230608113106 CreateOrganizationUsers: reverting ==========================
main: -- drop_table(:organization_users)
main: -> 0.0029s
main: == 20230608113106 CreateOrganizationUsers: reverted (0.0075s) =================
main: == [advisory_lock_connection] object_id: 228460, pg_backend_pid: 28585
ci: == [advisory_lock_connection] object_id: 228440, pg_backend_pid: 28998
ci: == 20230608113106 CreateOrganizationUsers: reverting ==========================
ci: -- drop_table(:organization_users)
ci: -> 0.0030s
ci: == 20230608113106 CreateOrganizationUsers: reverted (0.0142s) =================
ci: == [advisory_lock_connection] object_id: 228440, pg_backend_pid: 28998
How to set up and validate locally
- Run the migrations
organization_user = Organizations::OrganizationUser.new(organization_id: 1, user_id: <user-id>)
organization_user.save!
Organizations::Organization.find(1).users
User.find(<user-id>).organizations
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.
Related to #415418 (closed)
Edited by Abdul Wadood