app/Components.scala (49 lines of code) (raw):

import controllers._ import frontsapi.model.UpdateActions import story_packages.metrics.CloudWatch import play.api.ApplicationLoader.Context import play.api.{BuiltInComponentsFromContext, Mode} import play.api.routing.Router import play.filters.cors.CORSFilter import story_packages.services._ import story_packages.tools.FaciaApiIO import story_packages.updates.{AuditingUpdates, KinesisEventSender, Reindex, UpdatesStream} import router.Routes import conf.{ApplicationConfiguration, Responses} import play.api.libs.ws.ahc.AhcWSComponents import play.api.mvc.EssentialFilter import play.filters.gzip.GzipFilter class AppComponents(context: Context) extends BuiltInComponentsFromContext(context) with AhcWSComponents with AssetsComponents { val isTest = context.environment.mode == Mode.Test val isDev = context.environment.mode == Mode.Dev val config = new ApplicationConfiguration(configuration, context.environment.mode) val auditingUpdates = new AuditingUpdates(config) val kinesisEventSender = new KinesisEventSender(config) val frontsApi = new FrontsApi(config) val s3FrontsApi = new S3FrontsApi(config, isTest) val faciaApiIo = new FaciaApiIO(frontsApi, s3FrontsApi) val updateActions = new UpdateActions(faciaApiIo, frontsApi, config) val database = new Database(config) val updatesStream = new UpdatesStream(auditingUpdates, kinesisEventSender) val dynamoReindexJobs = new DynamoReindexJobs(config) val reindex = new Reindex(dynamoReindexJobs, database, frontsApi, kinesisEventSender, actorSystem.scheduler) val cloudwatch = new CloudWatch(config) var assetsManager = new AssetsManager(config, isDev) val defaults = new DefaultsController(config, controllerComponents, wsClient) val faciaProxy = new FaciaContentApiProxy(config, controllerComponents, wsClient) val faciaTool = new FaciaToolController(config, controllerComponents, frontsApi, updateActions, database, updatesStream, wsClient) val pandaAuth = new PandaAuthController(config, controllerComponents, wsClient) val status = new StatusController(config, controllerComponents, wsClient) val storyPackages = new StoryPackagesController(config, controllerComponents, database, updatesStream, frontsApi, reindex, wsClient) val vanity = new VanityRedirects(config, controllerComponents, wsClient) val views = new ViewsController(config, controllerComponents, assetsManager, wsClient) val publicAssets = new PublicAssets(assets, config, controllerComponents, wsClient) val customGzipFilter = new GzipFilter(shouldGzip = (header, _) => !Responses.isImage(header)) override lazy val httpFilters: Seq[EssentialFilter] = Seq( customGzipFilter, new CORSFilter ) val router: Router = new Routes(httpErrorHandler, status, pandaAuth, views, faciaTool, defaults, storyPackages, faciaProxy, vanity, publicAssets) }