common/app/model/dotcomrendering/pageElements/EditionsCrosswordRenderingDataModel.scala (37 lines of code) (raw):
package model.dotcomrendering.pageElements
import com.gu.contentapi.client.model.v1.Crossword
import com.gu.contentapi.json.CirceEncoders._
import io.circe.syntax._
import model.Cached.CapiRichDateTime
import model.CrosswordData
import play.api.libs.json.{JsValue, Json}
case class EditionsCrosswordRenderingDataModel(
crosswords: Iterable[Crossword],
newCrosswords: Iterable[CrosswordData],
)
object EditionsCrosswordRenderingDataModel {
def apply(
crosswords: Iterable[Crossword],
newCrosswords: Iterable[CrosswordData],
): EditionsCrosswordRenderingDataModel =
new EditionsCrosswordRenderingDataModel(
crosswords.map(crossword => {
val shipSolutions =
crossword.dateSolutionAvailable
.map(_.toJoda.isBeforeNow)
.getOrElse(crossword.solutionAvailable)
if (shipSolutions) {
crossword
} else {
crossword.copy(entries = crossword.entries.map(_.copy(solution = None)))
}
}),
newCrosswords,
)
def toJson(model: EditionsCrosswordRenderingDataModel): JsValue = {
Json.obj(
"crosswords" -> Json.parse(model.crosswords.asJson.deepDropNullValues.toString()),
"newCrosswords" -> Json.toJson(model.newCrosswords),
)
}
}