class Family::Admissions::Applicants::AdditionalValuesController < Family::Admissions::Controller
  include Family::Admissions::ApplicantScoped

  def batch_update
    objects = []
    params[:additional_values].each do |param|
      additional_value = find_or_build_additional_value(param[:field_id])
      additional_value.value = param[:value]
      objects << additional_value
    end

    if transactional_save(objects)
      render_success :ok, message: 'Additional values updated.'
    else
      render_error :unprocessable_entity, errors: multi_errors(objects)
    end
  end

  private
    def additional_values
      @additional_values ||= applicant.additional_values.index_by(&:student_additional_field_id)
    end

    def find_or_build_additional_value(field_id)
      additional_values[field_id] ||
        applicant.additional_values.build(student_additional_field_id: field_id)
    end
end
