diff options
Diffstat (limited to 'app/services/users')
-rw-r--r-- | app/services/users/activity_service.rb | 2 | ||||
-rw-r--r-- | app/services/users/batch_status_cleaner_service.rb | 2 | ||||
-rw-r--r-- | app/services/users/refresh_authorized_projects_service.rb | 71 | ||||
-rw-r--r-- | app/services/users/respond_to_terms_service.rb | 3 | ||||
-rw-r--r-- | app/services/users/set_status_service.rb | 3 | ||||
-rw-r--r-- | app/services/users/update_canonical_email_service.rb | 2 | ||||
-rw-r--r-- | app/services/users/update_todo_count_cache_service.rb | 34 |
7 files changed, 52 insertions, 65 deletions
diff --git a/app/services/users/activity_service.rb b/app/services/users/activity_service.rb index 85855f45e33..64844a3f002 100644 --- a/app/services/users/activity_service.rb +++ b/app/services/users/activity_service.rb @@ -37,3 +37,5 @@ module Users end end end + +Users::ActivityService.prepend_ee_mod diff --git a/app/services/users/batch_status_cleaner_service.rb b/app/services/users/batch_status_cleaner_service.rb index ea6142f13cc..533794f8d60 100644 --- a/app/services/users/batch_status_cleaner_service.rb +++ b/app/services/users/batch_status_cleaner_service.rb @@ -2,7 +2,7 @@ module Users class BatchStatusCleanerService - BATCH_SIZE = 100.freeze + BATCH_SIZE = 100 # Cleanup BATCH_SIZE user_statuses records # rubocop: disable CodeReuse/ActiveRecord diff --git a/app/services/users/refresh_authorized_projects_service.rb b/app/services/users/refresh_authorized_projects_service.rb index 070713929e4..d28ff45bfdf 100644 --- a/app/services/users/refresh_authorized_projects_service.rb +++ b/app/services/users/refresh_authorized_projects_service.rb @@ -51,38 +51,12 @@ module Users # This method returns the updated User object. def execute_without_lease - current = current_authorizations_per_project - fresh = fresh_access_levels_per_project - - # Delete projects that have more than one authorizations associated with - # the user. The correct authorization is added to the ``add`` array in the - # next stage. - remove = projects_with_duplicates - current.except!(*projects_with_duplicates) - - remove |= current.each_with_object([]) do |(project_id, row), array| - # rows not in the new list or with a different access level should be - # removed. - if !fresh[project_id] || fresh[project_id] != row.access_level - if incorrect_auth_found_callback - incorrect_auth_found_callback.call(project_id, row.access_level) - end - - array << row.project_id - end - end - - add = fresh.each_with_object([]) do |(project_id, level), array| - # rows not in the old list or with a different access level should be - # added. - if !current[project_id] || current[project_id].access_level != level - if missing_auth_found_callback - missing_auth_found_callback.call(project_id, level) - end - - array << [user.id, project_id, level] - end - end + remove, add = AuthorizedProjectUpdate::FindRecordsDueForRefreshService.new( + user, + source: source, + incorrect_auth_found_callback: incorrect_auth_found_callback, + missing_auth_found_callback: missing_auth_found_callback + ).execute update_authorizations(remove, add) end @@ -104,6 +78,10 @@ module Users user.reset end + private + + attr_reader :incorrect_auth_found_callback, :missing_auth_found_callback + def log_refresh_details(remove, add) Gitlab::AppJsonLogger.info(event: 'authorized_projects_refresh', user_id: user.id, @@ -115,34 +93,5 @@ module Users 'authorized_projects_refresh.rows_deleted_slice': remove.first(5), 'authorized_projects_refresh.rows_added_slice': add.first(5)) end - - def fresh_access_levels_per_project - fresh_authorizations.each_with_object({}) do |row, hash| - hash[row.project_id] = row.access_level - end - end - - def current_authorizations_per_project - current_authorizations.index_by(&:project_id) - end - - def current_authorizations - @current_authorizations ||= user.project_authorizations.select(:project_id, :access_level) - end - - def fresh_authorizations - Gitlab::ProjectAuthorizations.new(user).calculate - end - - private - - attr_reader :incorrect_auth_found_callback, :missing_auth_found_callback - - def projects_with_duplicates - @projects_with_duplicates ||= current_authorizations - .group_by(&:project_id) - .select { |project_id, authorizations| authorizations.count > 1 } - .keys - end end end diff --git a/app/services/users/respond_to_terms_service.rb b/app/services/users/respond_to_terms_service.rb index 254480304f9..7cdfef1489b 100644 --- a/app/services/users/respond_to_terms_service.rb +++ b/app/services/users/respond_to_terms_service.rb @@ -3,7 +3,8 @@ module Users class RespondToTermsService def initialize(user, term) - @user, @term = user, term + @user = user + @term = term end # rubocop: disable CodeReuse/ActiveRecord diff --git a/app/services/users/set_status_service.rb b/app/services/users/set_status_service.rb index a907937070f..2b4be8c833b 100644 --- a/app/services/users/set_status_service.rb +++ b/app/services/users/set_status_service.rb @@ -7,7 +7,8 @@ module Users attr_reader :current_user, :target_user, :params def initialize(current_user, params) - @current_user, @params = current_user, params.dup + @current_user = current_user + @params = params.dup @target_user = params.delete(:user) || current_user end diff --git a/app/services/users/update_canonical_email_service.rb b/app/services/users/update_canonical_email_service.rb index 1400fd58eb4..e75452f60fd 100644 --- a/app/services/users/update_canonical_email_service.rb +++ b/app/services/users/update_canonical_email_service.rb @@ -7,7 +7,7 @@ module Users INCLUDED_DOMAINS_PATTERN = [/gmail.com/].freeze def initialize(user:) - raise ArgumentError.new("Please provide a user") unless user&.is_a?(User) + raise ArgumentError.new("Please provide a user") unless user.is_a?(User) @user = user end diff --git a/app/services/users/update_todo_count_cache_service.rb b/app/services/users/update_todo_count_cache_service.rb new file mode 100644 index 00000000000..03ab66bd64a --- /dev/null +++ b/app/services/users/update_todo_count_cache_service.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +module Users + class UpdateTodoCountCacheService < BaseService + QUERY_BATCH_SIZE = 10 + + attr_reader :users + + # users - An array of User objects + def initialize(users) + @users = users + end + + def execute + users.each_slice(QUERY_BATCH_SIZE) do |users_batch| + todo_counts = Todo.for_user(users_batch).count_grouped_by_user_id_and_state + + users_batch.each do |user| + update_count_cache(user, todo_counts, :done) + update_count_cache(user, todo_counts, :pending) + end + end + end + + private + + def update_count_cache(user, todo_counts, state) + count = todo_counts.fetch([user.id, state.to_s], 0) + expiration_time = user.count_cache_validity_period + + Rails.cache.write(['users', user.id, "todos_#{state}_count"], count, expires_in: expiration_time) + end + end +end |