Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bulk_imports/users_mapper.rb')
-rw-r--r--lib/bulk_imports/users_mapper.rb51
1 files changed, 51 insertions, 0 deletions
diff --git a/lib/bulk_imports/users_mapper.rb b/lib/bulk_imports/users_mapper.rb
new file mode 100644
index 00000000000..74412bc3831
--- /dev/null
+++ b/lib/bulk_imports/users_mapper.rb
@@ -0,0 +1,51 @@
+# frozen_string_literal: true
+
+module BulkImports
+ class UsersMapper
+ include Gitlab::Utils::StrongMemoize
+
+ SOURCE_USER_IDS_CACHE_KEY = 'bulk_imports/%{bulk_import}/%{entity}/source_user_ids'
+
+ def initialize(context:)
+ @context = context
+ @cache_key = SOURCE_USER_IDS_CACHE_KEY % {
+ bulk_import: @context.bulk_import.id,
+ entity: @context.entity.id
+ }
+ end
+
+ def map
+ strong_memoize(:map) do
+ map = hash_with_default
+
+ cached_source_user_ids.each_pair do |source_id, destination_id|
+ map[source_id.to_i] = destination_id.to_i
+ end
+
+ map
+ end
+ end
+
+ def include?(source_user_id)
+ map.has_key?(source_user_id)
+ end
+
+ def default_user_id
+ @context.current_user.id
+ end
+
+ def cache_source_user_id(source_id, destination_id)
+ ::Gitlab::Cache::Import::Caching.hash_add(@cache_key, source_id, destination_id)
+ end
+
+ private
+
+ def hash_with_default
+ Hash.new { default_user_id }
+ end
+
+ def cached_source_user_ids
+ ::Gitlab::Cache::Import::Caching.values_from_hash(@cache_key)
+ end
+ end
+end