def makeBatches()

in fapi-client/src/main/scala/com/gu/facia/api/contentapi/IdsSearchQueries.scala [11:31]


  def makeBatches(ids: Seq[Id]): Option[Seq[Seq[Id]]] = {
    def batchAndRemaining(ids: Seq[Id]): Option[(Seq[Id], Seq[Id])] =
      ids.inits.find{ init =>
        init.length <= MaxBatchSize
      } map { batch =>
        (batch, ids.drop(batch.length))
      }

    @tailrec
    def iter(ids: Seq[Id], accumulator: Seq[Seq[Id]]): Option[Seq[Seq[Id]]] = {
      if (ids.isEmpty) {
        Some(accumulator)
      } else batchAndRemaining(ids) match {
        case None => None
        case Some((batch, remaining)) =>
          iter(remaining, accumulator :+ batch)
      }
    }

    iter(ids, Seq.empty)
  }