def editionIndex()

in app/controllers/V2App.scala [29:151]


  def editionIndex(issueId: String) = index(s"issues/${issueId}", Some(issueId))
  def index(priority: String = "", issueId: Option[String] = None) =
    getCollectionPermissionFilterByPriority(priority, acl)(ec) { implicit req =>
      val editingEdition = issueId.isDefined

      val isFeast = issueId
        .flatMap(id =>
          db.getIssue(id).map(issue => issue.platform == CuratedPlatform.Feast)
        )
        .getOrElse(false)

      import org.scanamo.generic.auto._
      val userDataTable = Table[UserData](config.faciatool.userDataTable)

      val jsFileName = "dist/index.js"
      val cssFileName = "dist/index.css"
      val faviconDirectoryName = "favicon/"

      val jsLocation: String = routes.V2Assets.at(jsFileName).toString
      val cssLocation: String = routes.V2Assets.at(cssFileName).toString
      val faviconLocation: String =
        routes.V2Assets.at(faviconDirectoryName).toString

      val hasBreakingNews = acl.testUser(
        Permissions.BreakingNewsAlert,
        "facia-tool-allow-breaking-news-for-all"
      )(req.user.email)
      val hasConfigureFronts = acl.testUser(
        Permissions.ConfigureFronts,
        "facia-tool-allow-config-for-all"
      )(req.user.email)
      val hasEditionsPermissions = acl.testUser(
        Permissions.EditEditions,
        "facia-tool-allow-edit-editions-for-all"
      )(req.user.email)
      val pinboardPermission =
        acl.testUser(Permissions.Pinboard, "facia-tool-allow-pinboard-for-all")(
          req.user.email
        )

      val acls = AclJson(
        fronts = Map(config.faciatool.breakingNewsFront -> hasBreakingNews),
        editions =
          Map(config.faciatool.canEditEditions -> hasEditionsPermissions),
        permissions = Map("configure-config" -> hasConfigureFronts)
      )

      val userEmail: String = req.user.email

      val maybeUserData: Option[UserData] = Scanamo(dynamoClient)
        .exec(userDataTable.get("email" === userEmail))
        .flatMap(_.toOption)

      val clipboardCards = if (editingEdition) {
        if (isFeast)
          maybeUserData.map(
            _.feastEditionsClipboardCards
              .getOrElse(List())
              .map(ClipboardCard.apply)
          )
        else
          maybeUserData.map(
            _.editionsClipboardArticles
              .getOrElse(List())
              .map(ClipboardCard.apply)
          )
      } else
        maybeUserData.map(
          _.clipboardArticles.getOrElse(List()).map(ClipboardCard.apply)
        )

      val userDataForDefaults = UserDataForDefaults.fromUserData(
        maybeUserData.getOrElse(UserData(userEmail)),
        clipboardCards
      )

      val conf = Defaults(
        isDev,
        config.environment.stage,
        Seq("uk", "us", "au"),
        userEmail,
        req.user.avatarUrl,
        req.user.firstName,
        req.user.lastName,
        config.sentry.publicDSN,
        config.media.baseUrl.get,
        config.media.apiUrl,
        SwitchManager.getSwitchesAsJson(),
        acls,
        config.facia.collectionCap,
        config.facia.navListCap,
        config.facia.navListType,
        Metadata.tags.map { case (_, meta) =>
          meta
        },
        Some(userDataForDefaults),
        routes.FaciaContentApiProxy.capiLive("").absoluteURL(true),
        routes.FaciaContentApiProxy.capiPreview("").absoluteURL(true),
        TargetedTerritory.allTerritories,
        EditionsAppTemplates.getAvailableTemplates ++ FeastAppTemplates.getAvailableTemplates,
        telemetryUrl = telemetryUrl
      )

      Ok(
        views.html.V2App.app(
          "Fronts Tool",
          jsLocation,
          cssLocation,
          faviconLocation,
          Json.toJson(conf).toString(),
          isDev,
          maybePinboardUrl = pinboardPermission match {
            case AccessGranted =>
              Some(
                s"https://pinboard.${config.environment.correspondingToolsDomainSuffix}/pinboard.loader.js"
              )
            case _ =>
              None
          },
          maybeTelemetryUrl = Some(telemetryUrl)
        )
      )
    }