def summaryFromTwo[T <: IndexedItem, U <: IndexedItem]()

in app/controllers/Api.scala [76:103]


  def summaryFromTwo[T <: IndexedItem, U <: IndexedItem](
      sourceTAgent: CollectorAgent[T],
      transformT: T => Iterable[JsValue],
      sourceUAgent: CollectorAgent[U],
      transformU: U => Iterable[JsValue],
      key: String,
      enableFilter: Boolean = false
  )(implicit ordering: Ordering[String]) =
    Action.async { implicit request =>
      ApiResult.filter[JsValue] {
        sourceTAgent
          .get()
          .map { datum => datum.label -> datum.data.flatMap(transformT) }
          .toMap ++
          sourceUAgent
            .get()
            .map { datum => datum.label -> datum.data.flatMap(transformU) }
            .toMap
      } reduce { transformed =>
        val objects =
          transformed.values.toSeq.flatten.distinct.sortBy(sortString)(ordering)
        val filteredObjects = if (enableFilter) {
          val filter = ResourceFilter.fromRequest
          objects.filter(filter.isMatch)
        } else objects
        Json.obj(key -> Json.toJson(filteredObjects))
      }
    }