diff --git a/.rubocop_todo/gitlab/namespaced_class.yml b/.rubocop_todo/gitlab/namespaced_class.yml index 8b59571249c215eab1b160f02e02aeee2627ce57..67f946e05ecb6d4578c130cfc4c26e67c270c4b0 100644 --- a/.rubocop_todo/gitlab/namespaced_class.yml +++ b/.rubocop_todo/gitlab/namespaced_class.yml @@ -327,7 +327,6 @@ Gitlab/NamespacedClass: - 'app/models/user_custom_attribute.rb' - 'app/models/user_detail.rb' - 'app/models/user_highest_role.rb' - - 'app/models/user_interacted_project.rb' - 'app/models/user_mention.rb' - 'app/models/user_preference.rb' - 'app/models/user_status.rb' diff --git a/.rubocop_todo/rspec/feature_category.yml b/.rubocop_todo/rspec/feature_category.yml index 174fda7107fe5b25464629bb733cecced4af57e5..bc5a5880d201af19db1aca9ead184a3134dfc2d5 100644 --- a/.rubocop_todo/rspec/feature_category.yml +++ b/.rubocop_todo/rspec/feature_category.yml @@ -4776,7 +4776,6 @@ RSpec/FeatureCategory: - 'spec/models/user_custom_attribute_spec.rb' - 'spec/models/user_detail_spec.rb' - 'spec/models/user_highest_role_spec.rb' - - 'spec/models/user_interacted_project_spec.rb' - 'spec/models/user_mentions/commit_user_mention_spec.rb' - 'spec/models/user_mentions/issue_user_mention_spec.rb' - 'spec/models/user_mentions/merge_request_user_mention_spec.rb' diff --git a/.rubocop_todo/rspec/named_subject.yml b/.rubocop_todo/rspec/named_subject.yml index 960b5bb5a05a8bd35059e244688e371994125212..461d4114408ba083e82a3539e58a7599fcc1d034 100644 --- a/.rubocop_todo/rspec/named_subject.yml +++ b/.rubocop_todo/rspec/named_subject.yml @@ -2869,7 +2869,6 @@ RSpec/NamedSubject: - 'spec/models/uploads/fog_spec.rb' - 'spec/models/uploads/local_spec.rb' - 'spec/models/user_custom_attribute_spec.rb' - - 'spec/models/user_interacted_project_spec.rb' - 'spec/models/user_spec.rb' - 'spec/models/user_status_spec.rb' - 'spec/models/users/credit_card_validation_spec.rb' diff --git a/app/models/event.rb b/app/models/event.rb index 7b91727f7d49a36584c919443bd68e4f39ad03e3..3f024958899bd327d0d3127438d5ee821732d0c3 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -82,7 +82,6 @@ class Event < ApplicationRecord # Callbacks after_create :reset_project_activity after_create :set_last_repository_updated_at, if: :push_action? - after_create ->(event) { UserInteractedProject.track(event) } # Scopes scope :recent, -> { reorder(id: :desc) } diff --git a/app/models/user.rb b/app/models/user.rb index a7c90765be1845f570c85c977e6c5d3246c87596..8576a9fbb3172a0614c82f35ea14b740e194e27b 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -219,9 +219,6 @@ def update_tracked_fields!(request) has_many :project_authorizations, dependent: :delete_all # rubocop:disable Cop/ActiveRecordDependent has_many :authorized_projects, through: :project_authorizations, source: :project - has_many :user_interacted_projects - has_many :project_interactions, through: :user_interacted_projects, source: :project, class_name: 'Project' - has_many :snippets, dependent: :destroy, foreign_key: :author_id # rubocop:disable Cop/ActiveRecordDependent has_many :notes, dependent: :destroy, foreign_key: :author_id # rubocop:disable Cop/ActiveRecordDependent has_many :issues, dependent: :destroy, foreign_key: :author_id # rubocop:disable Cop/ActiveRecordDependent diff --git a/app/models/user_interacted_project.rb b/app/models/user_interacted_project.rb deleted file mode 100644 index 73bca3629602de5a6049af6997ea5c114a15b28c..0000000000000000000000000000000000000000 --- a/app/models/user_interacted_project.rb +++ /dev/null @@ -1,39 +0,0 @@ -# frozen_string_literal: true - -class UserInteractedProject < ApplicationRecord - extend SuppressCompositePrimaryKeyWarning - - belongs_to :user - belongs_to :project - - validates :project_id, presence: true - validates :user_id, presence: true - - CACHE_EXPIRY_TIME = 1.day - - class << self - def track(event) - # For events without a project, we simply don't care. - # An example of this is the creation of a snippet (which - # is not related to any project). - return unless event.project_id - - attributes = { - project_id: event.project_id, - user_id: event.author_id - } - - cached_exists?(**attributes) do - where(attributes).exists? || UserInteractedProject.insert_all([attributes], unique_by: %w[project_id user_id]) - true - end - end - - private - - def cached_exists?(project_id:, user_id:, &block) - cache_key = "user_interacted_projects:#{project_id}:#{user_id}" - Rails.cache.fetch(cache_key, expires_in: CACHE_EXPIRY_TIME, &block) - end - end -end diff --git a/ee/app/services/security/orchestration/create_bot_service.rb b/ee/app/services/security/orchestration/create_bot_service.rb index 171f83e490bcbacbeec532f95a7cb1220c27d19b..2d29ca3439b2ab0922f9031bfdb5bd45f52019fb 100644 --- a/ee/app/services/security/orchestration/create_bot_service.rb +++ b/ee/app/services/security/orchestration/create_bot_service.rb @@ -24,7 +24,7 @@ def execute bot_user_params ).execute Gitlab::Database::QueryAnalyzers::PreventCrossDatabaseModification.temporary_ignore_tables_in_transaction( - %w[members notification_settings events user_interacted_projects projects], url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/424290' + %w[members notification_settings events projects], url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/424290' ) do if skip_authorization project.add_guest(bot_user) diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb index 6430fc2ffc898b435fa36db056fa9a6e1892bcb8..e142c35a681868f41d677494460814cf13851831 100644 --- a/spec/models/event_spec.rb +++ b/spec/models/event_spec.rb @@ -68,15 +68,6 @@ end.not_to change { project.last_repository_updated_at } end end - - describe 'after_create UserInteractedProject.track' do - let(:event) { build(:push_event, project: project, author: project.first_owner) } - - it 'passes event to UserInteractedProject.track' do - expect(UserInteractedProject).to receive(:track).with(event) - event.save! - end - end end describe 'validations' do diff --git a/spec/models/user_interacted_project_spec.rb b/spec/models/user_interacted_project_spec.rb deleted file mode 100644 index aa038b06d8dd600765881044ed308345d5a52aeb..0000000000000000000000000000000000000000 --- a/spec/models/user_interacted_project_spec.rb +++ /dev/null @@ -1,52 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe UserInteractedProject do - let_it_be(:project) { create(:project) } - let_it_be(:author) { project.creator } - - describe '.track' do - subject { described_class.track(event) } - - let(:event) { build(:event, project: project, author: author) } - - Event.actions.each_key do |action| - context "for all actions (event types)" do - let(:event) { build(:event, project: project, author: author, action: action) } - - it 'creates a record' do - expect { subject }.to change { described_class.count }.from(0).to(1) - end - end - end - - it 'sets project accordingly' do - subject - expect(described_class.first.project).to eq(event.project) - end - - it 'sets user accordingly' do - subject - expect(described_class.first.user).to eq(event.author) - end - - it 'only creates a record once per user/project' do - expect do - subject - described_class.track(event) - end.to change { described_class.count }.from(0).to(1) - end - - describe 'with an event without a project' do - let(:event) { build(:event, project: nil) } - - it 'ignores the event' do - expect { subject }.not_to change { described_class.count } - end - end - end - - it { is_expected.to validate_presence_of(:project_id) } - it { is_expected.to validate_presence_of(:user_id) } -end diff --git a/spec/support/rspec_order_todo.yml b/spec/support/rspec_order_todo.yml index 17dc7fa6dbf8164113dd6d6988f7530b34d1ad23..b32e64fda3db1ae3ce903288a8a52520ccadbfb4 100644 --- a/spec/support/rspec_order_todo.yml +++ b/spec/support/rspec_order_todo.yml @@ -7600,7 +7600,6 @@ - './spec/models/user_custom_attribute_spec.rb' - './spec/models/user_detail_spec.rb' - './spec/models/user_highest_role_spec.rb' -- './spec/models/user_interacted_project_spec.rb' - './spec/models/user_mentions/commit_user_mention_spec.rb' - './spec/models/user_mentions/issue_user_mention_spec.rb' - './spec/models/user_mentions/merge_request_user_mention_spec.rb'