def call(params)
unless DELETE_MODES.include?(params.delete_mode) || params.delete_mode.nil?
fail "The parameter \"delete_mode\" has to have one of the values #{DELETE_MODES.map(&:to_s).join(', ')} or has to be empty."
end
case params.delete_mode
when 'delete_projects'
delete_projects = true
delete_extra = true
when 'delete_extra'
delete_projects = false
delete_extra = true
else
delete_projects = GoodData::Helpers.to_boolean(params.delete_projects)
delete_extra = GoodData::Helpers.to_boolean(params.delete_extra)
end
if delete_projects && !delete_extra
GoodData.logger.warn("Parameter `delete_projects` is set to true and parameter `delete_extra` is set to false (which is default) this action will not delete anything!")
end
client = params.gdc_gd_client
domain_name = params.organization || params.domain
fail "Either organisation or domain has to be specified in params" unless domain_name
domain = client.domain(domain_name) || fail("Invalid domain name specified - #{domain_name}")
data_product = params.data_product
segments = {}
params.clients.group_by { |data| data[:segment] }.each do |segment_name, clients|
segment = domain.segments(segment_name, data_product)
segments[segment_name] = segment
(clients.map(&:id) - segment.clients.map(&:id)).each do |c|
segment.create_client(id: c)
end
end
params.clients.map! do |data|
data[:data_product_id] = segments[data[:segment]].data_product.data_product_id
data
end
domain.update_clients_settings(params.clients)
options = { delete_projects: delete_projects }
options.merge!(delete_extra_option(params, delete_extra)) if delete_extra
results = domain.update_clients(params.clients, options)
results&.each do |r|
r[:status] = 'CREATED' if r[:originalProject].nil?
r[:project] = r[:originalProject]
end
results
end