# frozen_string_literal: true # # License: AGPL-3.0-or-later WITH WTO-AP-3.0-or-later # Full license explanation at https://github.com/houdiniproject/houdini/blob/master/LICENSE # # NOTE: this should be moved to bess when Nonprofit and wiki is class NonprofitCreation def initialize(result, options = nil) result = sanitize_optional_fields(result) @nonprofit = ::Nonprofit.new(result[:nonprofit].merge({ register_np_only: true })) @user = User.new(result[:user]) @options = options end def call @user.skip_confirmation! if @options&.dig(:no_confirm_admin) result = {} ActiveRecord::Base.transaction do result = if @user.save && @nonprofit.save && roles.each(&:save) { success: true, messages: ["Nonprofit #{@nonprofit.id} successfully created."] } else retrieve_error_messages end end result end private def retrieve_error_messages result = { success: false, messages: [] } result = retrieve_user_error_messages(result) result = retrieve_nonprofit_error_messages(result) retrieve_roles_error_messages(result) end def retrieve_user_error_messages(result) @user.errors.full_messages.each { |i| result[:messages] << "Error creating user: #{i}" } result end def retrieve_nonprofit_error_messages(result) @nonprofit.errors.full_messages.each { |i| result[:messages] << "Error creating nonprofit: #{i}" } result end def retrieve_roles_error_messages(result) roles.each { |role| role.errors.full_messages.each { |i| result[:messages] << "Error creating role: #{i}" } } result end def roles roles = [Role.new(host: @nonprofit, name: 'nonprofit_admin', user: @user)] roles << Role.new(host: @nonprofit, name: 'super_admin', user: @user) if @options&.dig(:super_admin) roles end def sanitize_optional_fields(result) result.transform_values! { |keys| keys.transform_values! { |value| value&.empty? ? nil : value } } end end