Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into jlk/commercial-bundle…
Browse files Browse the repository at this point in the history
…-fetcher
  • Loading branch information
Jakeii committed Nov 29, 2024
2 parents 5bda8ca + 0c4b674 commit 527c5e2
Show file tree
Hide file tree
Showing 12 changed files with 115 additions and 26 deletions.
48 changes: 33 additions & 15 deletions applications/app/controllers/CrosswordsController.scala
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package controllers

import com.gu.contentapi.client.model.v1.CrosswordType.{Cryptic, Quick}
import com.gu.contentapi.client.model.v1.{Crossword, ItemResponse, Content => ApiContent, Section => ApiSection}
import common.{Edition, GuLogging, ImplicitControllerExecutionContext}
import conf.Static
import contentapi.ContentApiClient
import pages.{CrosswordHtmlPage, IndexHtmlPage, PrintableCrosswordHtmlPage}
import crosswords.{
AccessibleCrosswordPage,
AccessibleCrosswordRows,
Expand All @@ -14,18 +14,20 @@ import crosswords.{
CrosswordSearchPageWithResults,
CrosswordSvg,
}
import html.HtmlPageHelpers.ContentCSSFile
import model.Cached.{RevalidatableResult, WithoutRevalidationResult}
import model._
import model.dotcomrendering.pageElements.EditionsCrosswordRenderingDataModel
import model.dotcomrendering.{DotcomRenderingDataModel, PageType}
import org.joda.time.{DateTime, LocalDate}
import pages.{CrosswordHtmlPage, IndexHtmlPage, PrintableCrosswordHtmlPage}
import play.api.data.Forms._
import play.api.data._
import play.api.mvc.{Action, RequestHeader, Result, _}
import services.{IndexPage, IndexPageItem}
import html.HtmlPageHelpers.ContentCSSFile
import model.dotcomrendering.{DotcomRenderingDataModel, PageType}
import play.api.libs.ws.WSClient
import play.api.mvc._
import renderers.DotcomRenderingService
import services.dotcomrendering.{CrosswordsPicker, RemoteRender}
import services.{IndexPage, IndexPageItem}

import scala.concurrent.Future
import scala.concurrent.duration._
Expand Down Expand Up @@ -290,17 +292,33 @@ class CrosswordSearchController(
case class CrosswordLookup(crosswordType: String, id: Int)
}

class CrosswordEditionsController(val controllerComponents: ControllerComponents)
extends BaseController
class CrosswordEditionsController(
val contentApiClient: ContentApiClient,
val controllerComponents: ControllerComponents,
val remoteRenderer: DotcomRenderingService = DotcomRenderingService(),
val wsClient: WSClient,
) extends BaseController
with GuLogging
with ImplicitControllerExecutionContext {

def digitalEdition: Action[AnyContent] =
Action.async { implicit request =>
Future.successful(
Cached(CacheTime.Default)(
RevalidatableResult.Ok("Digital Edition Crossword Entry Point"),
),
)
}
def digitalEdition: Action[AnyContent] = Action.async { implicit request =>
getCrosswords
.map(parseCrosswords)
.flatMap {
case Some(crosswordPage) =>
remoteRenderer.getEditionsCrossword(wsClient, crosswordPage)
case None => Future.successful(NotFound)
}
}

private lazy val crosswordsQuery = contentApiClient.item("crosswords")

private def getCrosswords: Future[ItemResponse] = contentApiClient.getResponse(crosswordsQuery)

private def parseCrosswords(response: ItemResponse): Option[EditionsCrosswordRenderingDataModel] =
for {
results <- response.results
quick <- results.find(_.crossword.exists(_.`type` == Quick)).flatMap(_.crossword)
cryptic <- results.find(_.crossword.exists(_.`type` == Cryptic)).flatMap(_.crossword)
} yield EditionsCrosswordRenderingDataModel(quick, cryptic)
}
1 change: 1 addition & 0 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ val common = library("common")
eTagCachingS3,
nettyCodecHttp2,
contentApiClient,
contentApiModelsJson,
enumeratumPlayJson,
filters,
commonsLang,
Expand Down
13 changes: 12 additions & 1 deletion common/app/conf/switches/ABTestSwitches.scala
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,18 @@ trait ABTestSwitches {
"Test the impact of showing the user a component that highlights the Guardians journalism",
owners = Seq(Owner.withEmail("[email protected]")),
safeState = Off,
sellByDate = Some(LocalDate.of(2024, 12, 18)),
sellByDate = Some(LocalDate.of(2025, 1, 29)),
exposeClientSide = true,
highImpact = false,
)

Switch(
ABTests,
"ab-onwards-content-article",
"Test the impact of showing the galleries onwards content component on article pages",
owners = Seq(Owner.withEmail("[email protected]")),
safeState = Off,
sellByDate = Some(LocalDate.of(2025, 1, 29)),
exposeClientSide = true,
highImpact = false,
)
Expand Down
4 changes: 4 additions & 0 deletions common/app/model/CollectionConfig.scala
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ final case class CollectionConfig(
hideShowMore: Boolean,
displayHints: Option[DisplayHints],
platform: Option[CollectionPlatform] = None,
aspectRatio: Option[String],
)

object CollectionConfig {
Expand Down Expand Up @@ -53,6 +54,8 @@ object CollectionConfig {
None
}

val aspectRatio: String = fapi.CollectionConfig.getAspectRatio(config).label

CollectionConfig(
displayName = config.displayName,
backfill = config.backfill,
Expand All @@ -73,6 +76,7 @@ object CollectionConfig {
hideShowMore = config.hideShowMore,
displayHints = config.displayHints.map(DisplayHints.make),
platform = Some(config.platform),
aspectRatio = Some(aspectRatio),
)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package model.dotcomrendering.pageElements

import com.gu.contentapi.client.model.v1.Crossword
import com.gu.contentapi.json.CirceEncoders._
import io.circe.JsonObject
import io.circe.syntax._

case class EditionsCrosswordRenderingDataModel(
quick: Crossword,
cryptic: Crossword,
)

object EditionsCrosswordRenderingDataModel {
def toJson(model: EditionsCrosswordRenderingDataModel): String = {
JsonObject(
"quick" -> model.quick.asJson.dropNullValues,
"cryptic" -> model.cryptic.asJson.dropNullValues,
).asJson.dropNullValues.noSpaces
}
}
11 changes: 10 additions & 1 deletion common/app/renderers/DotcomRenderingService.scala
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package renderers

import org.apache.pekko.actor.{ActorSystem => PekkoActorSystem}
import com.gu.contentapi.client.model.v1.{Block, Blocks, Content}
import com.gu.contentapi.client.model.v1.{Block, Blocks, Content, Crossword}
import common.{DCRMetrics, GuLogging}
import concurrent.CircuitBreakerRegistry
import conf.Configuration
Expand All @@ -10,6 +10,7 @@ import crosswords.CrosswordPageWithContent
import http.{HttpPreconnections, ResultWithPreconnectPreload}
import model.Cached.{RevalidatableResult, WithoutRevalidationResult}
import model.dotcomrendering._
import model.dotcomrendering.pageElements.EditionsCrosswordRenderingDataModel
import model.{
CacheTime,
Cached,
Expand Down Expand Up @@ -417,6 +418,14 @@ class DotcomRenderingService extends GuLogging with ResultWithPreconnectPreload
val json = DotcomRenderingDataModel.toJson(dataModel)
post(ws, json, Configuration.rendering.articleBaseURL + "/Article", CacheTime.Facia)
}

def getEditionsCrossword(
ws: WSClient,
crosswords: EditionsCrosswordRenderingDataModel,
)(implicit request: RequestHeader): Future[Result] = {
val json = EditionsCrosswordRenderingDataModel.toJson(crosswords)
post(ws, json, Configuration.rendering.articleBaseURL + "/EditionsCrossword", CacheTime.Default)
}
}

object DotcomRenderingService {
Expand Down
1 change: 1 addition & 0 deletions common/test/common/facia/PressedCollectionBuilder.scala
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ object PressedCollectionBuilder {
showTimestamps = false,
hideShowMore,
displayHints = None,
aspectRatio = Some(""),
)

PressedCollection(
Expand Down
4 changes: 2 additions & 2 deletions docs/01-start-here/05-development-tips.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ make validate
```
These will fix the linting issues to make sure you won't have any issue trying to push or with the simple parts of the build.

If you have already committed you can use `make fix-commits` to verify & fix your commited code. It's
If you have already committed you can use `make fix-commits` to verify & fix your committed code. It's
faster than `make fix` but you will need to amend your previous commits to get a clean history.

If you are wondering what other options make has, you can simply type `make` at the comment line.
Expand Down Expand Up @@ -68,4 +68,4 @@ without having to configure the debugger yourself:

### Viewing AMP Pages

[Use DCR](https://github.com/guardian/dotcom-rendering/blob/main/docs/architecture/amp/000-structure-for-initial-milestone.md)
[Use DCR](https://github.com/guardian/dotcom-rendering/blob/main/dotcom-rendering/docs/architecture/amp/000-structure-for-initial-milestone.md)
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
"@emotion/react": "11.11.1",
"@emotion/styled": "^10.0.27",
"@guardian/ab-core": "8.0.0",
"@guardian/commercial": "23.7.0",
"@guardian/commercial": "23.7.4",
"@guardian/core-web-vitals": "6.0.0",
"@guardian/eslint-config-typescript": "9.0.1",
"@guardian/identity-auth": "3.0.0",
Expand Down
3 changes: 2 additions & 1 deletion project/Dependencies.scala
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ object Dependencies {
val awsVersion = "1.12.758"
val awsSdk2Version = "2.26.27"
val capiVersion = "32.0.0"
val faciaVersion = "13.0.0"
val faciaVersion = "13.1.0"
val dispatchVersion = "0.13.1"
val romeVersion = "1.0"
val jerseyVersion = "1.19.4"
Expand All @@ -32,6 +32,7 @@ object Dependencies {
val commonsIo = "commons-io" % "commons-io" % "2.16.1"
val cssParser = "net.sourceforge.cssparser" % "cssparser" % "0.9.30"
val contentApiClient = "com.gu" %% "content-api-client" % capiVersion
val contentApiModelsJson = "com.gu" %% "content-api-models-json" % "25.1.0"
val dfpAxis = "com.google.api-ads" % "dfp-axis" % "5.6.0"
val faciaFapiScalaClient = "com.gu" %% "fapi-client-play30" % faciaVersion
val identityCookie = "com.gu.identity" %% "identity-cookie" % identityLibVersion
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
export const onwardsContentArticle = {
id: 'onwardsContentArticle',
start: '2024-11-25',
expiry: '2025-01-29',
author: '[email protected]',
description:
'Test the impact of showing the galleries onwards content component on article pages.',
audience: 0 / 100,
audienceOffset: 0 / 100,
audienceCriteria: 'Article pages',
successMeasure:
'Users are more likely to click a link in the onward content component.',
canRun: () => true,
variants: [
{
id: 'control',
test: () => {},
},
{
id: 'variant',
test: () => {},
},
],
};
10 changes: 5 additions & 5 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3607,9 +3607,9 @@ __metadata:
languageName: node
linkType: hard

"@guardian/commercial@npm:23.7.0":
version: 23.7.0
resolution: "@guardian/commercial@npm:23.7.0"
"@guardian/commercial@npm:23.7.4":
version: 23.7.4
resolution: "@guardian/commercial@npm:23.7.4"
dependencies:
"@guardian/prebid.js": "npm:8.52.0-8"
"@octokit/core": "npm:^6.1.2"
Expand All @@ -3626,7 +3626,7 @@ __metadata:
"@guardian/libs": ^19.1.0
"@guardian/source": ^8.0.0
typescript: ~5.5.3
checksum: 10c0/0cdff54bd95d094329fe9210a44c6717b36fd8fe364f4ebbd1a8d48eea929d883895b837e6257befa413d3da8ddec85519746bbd2bbcbce33d58d33d17203884
checksum: 10c0/09fa6f6f237ff0a2bd81d4e9bf4203f4fe37bff33c963401217f5f5e513da505ccc9fab1284e8d732f8d77cff0927141fb7a67dfd60986f5fa91d27b47d5fd0a
languageName: node
linkType: hard

Expand Down Expand Up @@ -3699,7 +3699,7 @@ __metadata:
"@emotion/react": "npm:11.11.1"
"@emotion/styled": "npm:^10.0.27"
"@guardian/ab-core": "npm:8.0.0"
"@guardian/commercial": "npm:23.7.0"
"@guardian/commercial": "npm:23.7.4"
"@guardian/core-web-vitals": "npm:6.0.0"
"@guardian/eslint-config-typescript": "npm:9.0.1"
"@guardian/identity-auth": "npm:3.0.0"
Expand Down

0 comments on commit 527c5e2

Please sign in to comment.