common/app/model/Section.scala (170 lines of code) (raw):

package model import com.gu.contentapi.client.model.v1.{Section => ApiSection} import common.Pagination import common.commercial.CommercialProperties import navigation.GuardianFoundationHelper import play.api.libs.json.{JsString, JsValue, Json, OFormat} object Section { def make(section: ApiSection, pagination: Option[Pagination] = None): Section = { val id: String = section.id val webTitle: String = section.webTitle val adUnitSuffix = AdSuffixHandlingForFronts.extractAdUnitSuffixFrom(id, id) val keywordIds: Seq[String] = frontKeywordIds(id) val javascriptConfigOverrides: Map[String, JsValue] = Map( "keywords" -> JsString(webTitle), "keywordIds" -> JsString(keywordIds.mkString(",")), ) val metadata = MetaData( id, webUrl = section.webUrl, url = SupportedUrl(section), section = Some(SectionId.fromCapiSection(section)), pillar = None, format = None, designType = None, pagination = pagination, webTitle = webTitle, adUnitSuffix = adUnitSuffix, contentType = Some(DotcomContentType.Section), isFront = true, rssPath = Some(s"/$id/rss"), iosType = id match { case "crosswords" => None case _ => Some("front") }, javascriptConfigOverrides = javascriptConfigOverrides, commercial = Some(CommercialProperties.fromSection(section)), isFoundation = GuardianFoundationHelper.urlIsGuardianFoundation(section.webUrl) || GuardianFoundationHelper .sectionIdIsGuardianFoundation(id: String), ) Section( metadata, isEditionalised = section.editions.length > 1, ) } } case class Section private ( override val metadata: MetaData, isEditionalised: Boolean, ) extends StandalonePage case class SectionId(value: String) extends AnyVal object SectionId { implicit val jsonFormat: OFormat[SectionId] = Json.format[SectionId] def fromCapiSection(section: ApiSection): SectionId = SectionId(section.id) def fromId(id: String): SectionId = SectionId(id) } object Nielsen { private sealed trait Apid private case object Guardian extends Apid private case object Books extends Apid private case object Business extends Apid private case object CommentIsFree extends Apid private case object Culture extends Apid private case object Education extends Apid private case object Environment extends Apid private case object Fashion extends Apid private case object Film extends Apid private case object LifeStyle extends Apid private case object Media extends Apid private case object Money extends Apid private case object Music extends Apid private case object News extends Apid private case object Politics extends Apid private case object ProfessionalNetwork extends Apid private case object Science extends Apid private case object Society extends Apid private case object Sport extends Apid private case object Technology extends Apid private case object Travel extends Apid private case object TvRadio extends Apid private def apidToUuid(apid: Apid): String = apid match { case Guardian => "2879C1E1-7EF9-459B-9C5C-6F4D2BC9DD53" case Books => "4994D04B-4279-4184-A2C5-E8BB1DD50AB9" case Business => "163BF72C-72D0-4702-82A9-17A548A39D79" case CommentIsFree => "C962A2C3-C9E1-40DD-9B58-7B1095EDB16E" case Culture => "87C0725C-D478-4567-967B-E3519ECD12E8" case Education => "DD50B111-D493-4D25-8980-2B0752E16ED1" case Environment => "FEC0766C-C766-4A77-91B3-74C5525E680F" case Fashion => "1639B19E-B581-491E-94B7-FBACB6823C43" case Film => "D5BB97FE-637C-4E9E-B972-C8EA88101CB7" case LifeStyle => "B32533F9-65CF-4261-8BB9-2A707F59712A" case Media => "385AA13F-9B64-4927-9536-BE70F9AD54BD" case Money => "10BE8096-BF69-4252-AC27-C4127D8631F6" case Music => "9D928193-7B5C-45A9-89E4-C47F42B8FB73" case News => "66BEC53C-9890-477C-B639-60879EC4F762" case Politics => "C5C73A36-9E39-4D42-9049-2528DB5E998D" case ProfessionalNetwork => "9DFEFF7E-9D45-4676-82B3-F29A6BF05BE1" case Science => "F4867E05-4149-49F0-A9DE-9F3496930B8C" case Society => "617F9FB9-2D34-4C3A-A2E7-383AE877A35D" case Sport => "52A6516F-E323-449F-AA57-6A1B2386F8F6" case Technology => "4F448B55-305F-4203-B192-8534CB606C12" case Travel => "05A03097-D4CA-46BF-96AD-935252967239" case TvRadio => "3277F0D0-9389-4A32-A4D6-516B49D87E45" } private val sectionIdToApid = Map[String, Apid]( "books" -> Books, "childrens-books-site" -> Books, "business" -> Business, "better-business" -> Business, "business-to-business" -> Business, "working-in-development" -> Business, "commentisfree" -> CommentIsFree, "culture" -> Culture, "artanddesign" -> Culture, "culture-network" -> Culture, "culture-professionals-network" -> Culture, "games" -> Culture, "stage" -> Culture, "education" -> Education, "higher-education-network" -> Education, "teacher-network" -> Education, "environment" -> Environment, "animals-farmed" -> Environment, "fashion" -> Fashion, "film" -> Film, "lifeandstyle" -> LifeStyle, "media" -> Media, "money" -> Money, "music" -> Music, "news" -> News, "australia-news" -> News, "cardiff" -> News, "cities" -> News, "community" -> News, "edinburgh" -> News, "global-development" -> News, "government-computing-network" -> News, "law" -> News, "leeds" -> News, "local" -> News, "local-government-network" -> News, "media" -> News, "media-network" -> News, "uk-news" -> News, "us-news" -> News, "weather" -> News, "world" -> News, "politics" -> Politics, "guardian-professional" -> ProfessionalNetwork, "global-development-professionals-network" -> ProfessionalNetwork, "small-business-network" -> ProfessionalNetwork, "science" -> Science, "society" -> Society, "healthcare-network" -> Society, "housing-network" -> Society, "inequality" -> Society, "public-leaders-network" -> Society, "social-care-network" -> Society, "social-enterprise-network" -> Society, "society-professionals" -> Society, "women-in-leadership" -> Society, "sport" -> Sport, "football" -> Sport, "technology" -> Technology, "travel" -> Travel, "travel/offers" -> Travel, "tv-and-radio" -> TvRadio, ) def apidFromString(sectionId: String): String = apidToUuid(sectionIdToApid.getOrElse(sectionId, Guardian)) }