class Eco::API::UseCases::DefaultCases::OrgDataConvertCase < Eco::API::Common::Loaders::UseCase name "org-data-convert" type :import def org_data_convert(people) pp "Going to convert data from '#{source_enviro}' to '#{ASSETS.active_config}'" puts "\n" people.each.with_index do |person, i| if (i % 10 == 0) percent = i * 100 / people.length print "Processing: #{percent.round}% (#{i}/#{people.length} entries)\r" $stdout.flush end person.id = nil details_convert!(person) account_convert!(person) end people end def main(people, session, options, usecase) @options = options @session = session org_data_convert(people) end private def account_convert!(person) if account = person.account account.policy_group_ids = policy_groups_convert(account.policy_group_ids) account.doc.tap do |doc| ["login_provider_ids", "starred_ids", "landing_page_id"].map do |attr| doc.delete(attr) end end end end def details_convert!(person) if person.details person.details.as_json.tap do |details_doc| details_doc["schema_id"] = @session.schema.id person.add_details(@session.schema) person.details = details_doc end end end def policy_groups_convert(ids) ids.map do |id| unless name = source_config.policy_groups.to_name(id) error("Ops, do not know #{id} usergroup for source environment") end session.policy_groups.to_id(name).tap do |new_id| unless new_id error("Ops, do not know #{name} usergroup for destination environment") end end end end def source_config @source_config ||= ASSETS.config(key: source_enviro, update_active: false) end def source_enviro @source_enviro ||= options.dig(:source_enviro).tap do |enviro| error("A source organization is required to migrate data") unless enviro end end def logger @session.logger end def error(msg) logger.error(msg) exit(1) end end