app/models/BannerTests.scala (58 lines of code) (raw):
package models
import io.circe.generic.extras.Configuration
import io.circe.generic.extras.auto._
import io.circe.generic.extras.semiauto._
import io.circe.{Decoder, Encoder, Json}
import models.Methodology.defaultMethodologies
case class BannerUI(designName: String)
case class BannerContent(
heading: Option[String],
paragraphs: Option[List[String]],
messageText: Option[String],
highlightedText: Option[String],
cta: Option[Cta],
secondaryCta: Option[SecondaryCta]
)
case class BannerVariant(
name: String,
template: BannerUI,
bannerContent: Option[BannerContent],
mobileBannerContent: Option[BannerContent],
separateArticleCount: Option[Boolean],
separateArticleCountSettings: Option[SeparateArticleCount],
tickerSettings: Option[TickerSettings] = None,
)
case class BannerTestDeploySchedule(daysBetween: Int)
case class BannerTest(
name: String,
channel: Option[Channel],
status: Option[Status],
lockStatus: Option[LockStatus],
priority: Option[Int],
nickname: Option[String],
userCohort: UserCohort,
locations: List[Region] = Nil,
regionTargeting: Option[RegionTargeting]= None,
contextTargeting: PageContextTargeting = PageContextTargeting(Nil,Nil,Nil,Nil),
variants: List[BannerVariant],
articlesViewedSettings: Option[ArticlesViewedSettings] = None,
controlProportionSettings: Option[ControlProportionSettings] = None,
deviceType: Option[DeviceType] = None,
campaignName: Option[String] = Some("NOT_IN_CAMPAIGN"),
signedInStatus: Option[SignedInStatus] = Some(SignedInStatus.All),
consentStatus: Option[ConsentStatus] = Some(ConsentStatus.All),
deploySchedule: Option[BannerTestDeploySchedule] = None,
methodologies: List[Methodology] = defaultMethodologies
) extends ChannelTest[BannerTest] {
override def withChannel(channel: Channel): BannerTest =
this.copy(channel = Some(channel))
override def withPriority(priority: Int): BannerTest =
this.copy(priority = Some(priority))
}
object BannerTest {
implicit val customConfig: Configuration = Configuration.default.withDefaults
implicit val bannerTestDecoder: Decoder[BannerTest] =
deriveConfiguredDecoder[BannerTest]
implicit val bannerTestEncoder: Encoder[BannerTest] =
deriveConfiguredEncoder[BannerTest]
}