class Family::Admissions::Applicants::FamilyAdditionalValuesController <
  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, event: :updated
    else
      render_error :unprocessable_entity, errors: multi_errors(objects)
    end
  end

  private
    def additional_values
      current_family.admission_family_additional_values
    end

    def additional_values_by_field
      @additional_values_by_field ||= current_family.admission_family_additional_values
        .by_school_year(application.school_year)
        .index_by(&:family_additional_field_id)
    end

    def find_or_build_additional_value(field_id)
      additional_values_by_field[field_id] ||
        additional_values.build(family_additional_field_id: field_id)
    end
end
