def call(params)
project_mappings = ThreadSafe::Hash.new
client_mappings = ThreadSafe::Hash.new
continue_on_error = continue_on_error(params)
if continue_on_error
client = params.gdc_gd_client
domain_name = params.organization || params.domain
domain = client.domain(domain_name)
data_product = params.data_product
data_product_segments = domain.segments(:all, data_product)
if params.segments_filter
data_product_segments.select! do |segment|
params.segments_filter.include?(segment.segment_id)
end
end
data_product_segments.pmap do |segment|
segment.clients.map do |segment_client|
project = segment_client.project
next unless project
project_mappings[project.pid.to_sym] = {
client_id: segment_client.client_id,
segment_id: segment.segment_id
}
client_mappings[segment_client.client_id.to_sym] = {
project_id: project.pid,
segment_id: segment.segment_id
}
end
end
end
{
params: {
collect_synced_status: continue_on_error,
sync_failed_list: {
project_client_mappings: project_mappings,
client_project_mappings: client_mappings,
failed_detailed_projects: [],
failed_projects: [],
failed_clients: [],
failed_segments: []
}
}
}
end