3

I am trying to consume a paginated REST call, currently doing something like:

def depaginateGetEnvironmentUuids(uri: Uri, filters: Seq[BasicNameValuePair], pageNumber: Int = 1): Future[Seq[UUID]] = {
  val paginationFilters = Seq(new BasicNameValuePair("per_page", "1000"), new BasicNameValuePair("page", pageNumber.toString))
  serviceManager.getAssignment(uri, filters ++ paginationFilters: _*).flatMap { cP =>
    (cP.getStatus, cP.getBody.parseJson) match {
      case (HttpStatus.SC_OK, JsArray.empty) =>
        Future (Seq.empty[UUID] )
      case (HttpStatus.SC_OK, json) =>
        depaginateGetEnvironmentUuids (uri, filters, pageNumber + 1).map (_ ++ json.convertTo[Seq[AssignmentView]].map (se => se.environment.uuid).distinct)
      case (_, error) =>
        Future.failed(new Throwable(s"call to retrieve environment assignment: $error"))
    }
  }
}

Is there a better way of handling a RESTful service endpoint with pagination?

Jeffrey Chung
  • 19,319
  • 8
  • 34
  • 54
rojanu
  • 1,592
  • 5
  • 20
  • 34

0 Answers0