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())
}
}
}