summaryrefslogtreecommitdiff
path: root/app/services/concerns
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-06-20 11:10:13 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2022-06-20 11:10:13 +0000
commit0ea3fcec397b69815975647f5e2aa5fe944a8486 (patch)
tree7979381b89d26011bcf9bdc989a40fcc2f1ed4ff /app/services/concerns
parent72123183a20411a36d607d70b12d57c484394c8e (diff)
downloadgitlab-ce-0ea3fcec397b69815975647f5e2aa5fe944a8486.tar.gz
Add latest changes from gitlab-org/gitlab@15-1-stable-eev15.1.0-rc42
Diffstat (limited to 'app/services/concerns')
-rw-r--r--app/services/concerns/integrations/bulk_operation_hashes.rb31
-rw-r--r--app/services/concerns/members/bulk_create_users.rb86
2 files changed, 31 insertions, 86 deletions
diff --git a/app/services/concerns/integrations/bulk_operation_hashes.rb b/app/services/concerns/integrations/bulk_operation_hashes.rb
new file mode 100644
index 00000000000..3f13c764ebe
--- /dev/null
+++ b/app/services/concerns/integrations/bulk_operation_hashes.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+# Returns hashes of attributes suitable for passing to `.insert_all` or `update_all`
+module Integrations
+ module BulkOperationHashes
+ private
+
+ def integration_hash(operation)
+ integration
+ .to_database_hash
+ .merge('inherit_from_id' => integration.inherit_from_id || integration.id)
+ .merge(update_timestamps(operation))
+ end
+
+ def data_fields_hash(operation)
+ integration
+ .data_fields
+ .to_database_hash
+ .merge(update_timestamps(operation))
+ end
+
+ def update_timestamps(operation)
+ time_now = Time.current
+
+ {
+ 'created_at' => (time_now if operation == :create),
+ 'updated_at' => time_now
+ }.compact
+ end
+ end
+end
diff --git a/app/services/concerns/members/bulk_create_users.rb b/app/services/concerns/members/bulk_create_users.rb
deleted file mode 100644
index e60c84af89e..00000000000
--- a/app/services/concerns/members/bulk_create_users.rb
+++ /dev/null
@@ -1,86 +0,0 @@
-# frozen_string_literal: true
-
-module Members
- module BulkCreateUsers
- extend ActiveSupport::Concern
-
- included do
- class << self
- def add_users(source, users, access_level, current_user: nil, expires_at: nil, tasks_to_be_done: [], tasks_project_id: nil)
- return [] unless users.present?
-
- emails, users, existing_members = parse_users_list(source, users)
-
- Member.transaction do
- (emails + users).map! do |user|
- new(source,
- user,
- access_level,
- existing_members: existing_members,
- current_user: current_user,
- expires_at: expires_at,
- tasks_to_be_done: tasks_to_be_done,
- tasks_project_id: tasks_project_id)
- .execute
- end
- end
- end
-
- private
-
- def parse_users_list(source, list)
- emails = []
- user_ids = []
- users = []
- existing_members = {}
-
- list.each do |item|
- case item
- when User
- users << item
- when Integer
- user_ids << item
- when /\A\d+\Z/
- user_ids << item.to_i
- when Devise.email_regexp
- emails << item
- end
- end
-
- # the below will automatically discard invalid user_ids
- users.concat(User.id_in(user_ids)) if user_ids.present?
- users.uniq! # de-duplicate just in case as there is no controlling if user records and ids are sent multiple times
-
- users_by_emails = source.users_by_emails(emails) # preloads our request store for all emails
- # in case emails belong to a user that is being invited by user or user_id, remove them from
- # emails and let users/user_ids handle it.
- parsed_emails = emails.select do |email|
- user = users_by_emails[email]
- !user || (users.exclude?(user) && user_ids.exclude?(user.id))
- end
-
- if users.present?
- # helps not have to perform another query per user id to see if the member exists later on when fetching
- existing_members = source.members_and_requesters.with_user(users).index_by(&:user_id)
- end
-
- [parsed_emails, users, existing_members]
- end
- end
- end
-
- def initialize(source, user, access_level, **args)
- super
-
- @existing_members = args[:existing_members] || (raise ArgumentError, "existing_members must be included in the args hash")
- end
-
- private
-
- attr_reader :existing_members
-
- def find_or_initialize_member_by_user
- existing_members[user.id] || source.members.build(user_id: user.id)
- end
- end
-end