def renderOnwardComponent()

in commercial/app/controllers/HostedContentController.scala [88:170]


  def renderOnwardComponent(campaignName: String, pageName: String, contentType: String): Action[AnyContent] =
    Action.async { implicit request =>
      def onwardView(trails: Seq[HostedPage], defaultRowCount: Int, maxRowCount: Int): RevalidatableResult = {
        if (request.isAmp) {
          def toJson(trail: HostedPage) =
            Json.obj(
              "title" -> trail.title,
              "url" -> trail.url,
              "imageUrl" -> trail.thumbnailUrl,
            )
          JsonComponent {
            "items" -> JsArray(
              Seq(
                Json.obj(
                  "owner" -> trails.headOption.map(_.owner),
                  "trails" -> JsArray(trails.take(defaultRowCount).map(toJson)),
                ),
              ),
            )
          }
        } else {
          JsonComponent(hostedOnwardJourney(trails, maxRowCount))
        }
      }

      def galleryOnwardView(trails: Seq[HostedPage]): RevalidatableResult = {
        if (request.isAmp) {
          def toJson(trail: HostedPage) =
            Json.obj(
              "url" -> trail.url,
              "imageUrl" -> trail.thumbnailUrl,
            )
          JsonComponent {
            val cta = trails.headOption.map(_.cta)
            "items" -> JsArray(
              Seq(
                Json.obj(
                  "ctaText" -> cta.map(_.label),
                  "ctaLink" -> cta.map(_.url),
                  "buttonText" -> cta.map(_.btnText),
                  "trails" -> JsArray(trails.map(toJson)),
                ),
              ),
            )
          }
        } else {
          JsonComponent(hostedGalleryOnward(trails))
        }
      }

      val capiResponse = {
        val sectionId = s"advertiser-content/$campaignName"
        val query = baseQuery(sectionId)
          .pageSize(100)
          .orderBy("oldest")
        val response = contentApiClient.getResponse(query)
        response.failed.foreach { case NonFatal(e) =>
          log.warn(s"Capi lookup of item '$sectionId' failed: ${e.getMessage}", e)
        }
        response
      }

      capiResponse map { response =>
        response.results map { results =>
          val itemId = s"advertiser-content/$campaignName/$pageName"
          contentType match {
            case "video" =>
              val trails = HostedTrails.fromContent(itemId, results.toSeq)
              Cached(cacheDuration)(onwardView(trails, 1, 1))
            case "article" =>
              val trails = HostedTrails.fromContent(itemId, results.toSeq)
              Cached(cacheDuration)(onwardView(trails, 2, 4))
            case "gallery" =>
              val trails = HostedTrails.fromContent(itemId, trailCount = 2, results.toSeq)
              Cached(cacheDuration)(galleryOnwardView(trails))
            case _ =>
              Cached(0)(JsonNotFound())
          }
        } getOrElse {
          Cached(0)(JsonNotFound())
        }
      }
    }