lib/eco/api/usecases/default_cases/create_case.rb in eco-helpers-1.5.1 vs lib/eco/api/usecases/default_cases/create_case.rb in eco-helpers-1.5.2

- old
+ new

@@ -1,104 +1,18 @@ -module Eco - module API - class UseCases - class DefaultCases - class CreateCase < DefaultCase +class Eco::API::UseCases::DefaultCases::CreateCase < Eco::API::Common::Loaders::UseCase + name "create" + type :sync - def process - @cases.define("create", type: :sync) do |entries, people, session, options, usecase| - creation = session.job_group("main").new("create", usecase: usecase, type: :create, sets: [:core, :details, :account]) - supers = session.job_group("post").new("supers", usecase: usecase, type: :update, sets: :core) + def main(entries, people, session, options, usecase) + micro = session.micro + creation = session.new_job("main", "create", :create, usecase) + supers = session.new_job("post", "supers", :update, usecase, :core) - strict_search = session.config.people.strict_search? && (!options[:search]&.key?(:strict) || options.dig(:search, :strict)) - pgs = session.policy_groups - - if session.config.people.default_usergroup? - def_id = pgs.to_id(session.config.people.default_usergroup) - end - - entries.each.with_index do |entry, i| - if person = people.find(entry, strict: strict_search) - session.logger.error("Entry(#{i}) - this person (id: '#{person.id}') already exists: #{entry.to_s(:identify)}") - else - person = session.new_person - core_excluded = ["supervisor_id"] - - ini_tags = person.filter_tags || [] - entry.set_core(person, exclude: core_excluded) - - if session.tagtree - person.filter_tags = session.tagtree.user_tags( - initial: ini_tags, - final: person.filter_tags, - preserve_custom: true, - add_custom: true - ) - end - - entry.set_details(person) unless options.dig(:exclude, :details) - - unless options.dig(:exclude, :account) - add_account = !person.account - ini_pg_ids = person.account&.policy_group_ids || [] - - account_excluded = [] - account_excluded.push("policy_group_ids") if options.dig(:exclude, :policy_groups) && !create - - entry.set_account(person, exclude: account_excluded) - - person.account&.send_invites = options[:send_invites] if options.key?(:send_invites) - - unless options.dig(:exclude, :policy_groups) && !create - end_pg_ids = person.account.policy_group_ids || [] - - if add_account && def_id && !entry.policy_group_ids? - # on account creation, if missing policy_group_ids column in the input - # use default_usergroup, if it's defined - end_pg_ids = [def_id] - end - - # avoid false updates by preserving the original order - person.account.policy_group_ids = pgs.user_pg_ids( - initial: ini_pg_ids, - final: end_pg_ids - ) - end - - person.account.permissions_custom = session.new_preset(person) - - if session.tagtree - person.account.default_tag = session.tagtree.default_tag(*person.filter_tags) - else - tags = person.filter_tags || [] - person.account.default_tag = tags.first unless tags.length > 1 - end - end - - creation.add(person) - - # set supervisor - unless options.dig(:exclude, :core) || options.dig(:exclude, :supervisor) - if !(sup_id = entry.supervisor_id) - person.supervisor_id = nil - else - if supervisor = people.person(id: sup_id, external_id: sup_id, email: sup_id) - person.supervisor_id = supervisor.id - else - # delay setting supervisor if does not exit - supers.add(person) do |person| - person.supervisor_id = sup_id - end - end - end - end - - end - end - end - end - - end - end + micro.with_each_starter(entries, people, options, log_present: true) do |entry, person| + creation.add(person) + micro.set_core_with_supervisor(entry, person, people, supers, options) + entry.set_details(person) unless options.dig(:exclude, :details) + micro.set_account(entry, person, options) end end + end