gitlab-org--gitlab-foss/app/finders/groups/projects_requiring_authoriz.../on_direct_membership_finder.rb

37 lines
1.1 KiB
Ruby

# frozen_string_literal: true
# Groups::ProjectsRequiringAuthorizationsRefresh::OnDirectMembershipFinder
#
# Given a group, this finder can be used to obtain a list of Project IDs of projects
# that requires their `project_authorizations` records to be refreshed in the event where
# a member has been added/removed/updated in the group.
module Groups
module ProjectsRequiringAuthorizationsRefresh
class OnDirectMembershipFinder < Base
def execute
project_ids = Set.new
project_ids.merge(ids_of_projects_in_hierarchy_and_project_shares(@group))
project_ids.merge(ids_of_projects_in_hierarchy_and_project_shares_of_shared_groups(@group))
project_ids.to_a
end
private
def ids_of_projects_in_hierarchy_and_project_shares_of_shared_groups(group, batch_size: 10)
project_ids = Set.new
group.shared_groups.each_batch(of: batch_size) do |shared_groups_batch|
shared_groups_batch.each do |shared_group|
project_ids.merge(ids_of_projects_in_hierarchy_and_project_shares(shared_group))
end
end
project_ids
end
end
end
end