def rerunProxyJob()

in common/src/main/scala/com/theguardian/multimedia/archivehunter/common/ProxyTranscodeFramework/ProxyGenerators.scala [223:262]


  def rerunProxyJob(jobUuid:UUID) = {
    val entryFuture = jobModelDAO.jobForId(jobUuid.toString).flatMap({
      case None=>Future(Left(s"No job found for ${jobUuid.toString}"))
      case Some(Left(err))=>Future(Left(err.toString))
      case Some(Right(jobModel))=>
        indexer.getById(jobModel.sourceId).map(result=>Right((jobModel,result)))
    })

    entryFuture.flatMap({
      case Left(err)=>Future(Left(err))
      case Right(params)=>
        val jobModel = params._1
        val entry = params._2

        val targetFuture = scanTargetDAO.targetForBucket(entry.bucket).map({
          case None => throw new RuntimeException(s"Entry's source bucket ${entry.bucket} is not registered")
          case Some(Left(err)) => throw new RuntimeException(err.toString)
          case Some(Right(target)) => target
        })

        val uriToProxyFuture = getUriToProxy(entry)

        jobModel.transcodeInfo match {
          case Some(transcodeInfo)=>
            Future.sequence(Seq(targetFuture, uriToProxyFuture)).flatMap(futures=> {
              val target = futures.head.asInstanceOf[ScanTarget]
              val uriToProxy = futures(1).asInstanceOf[Option[String]]
              internalDoProxy(jobModel, transcodeInfo.requestType, transcodeInfo.proxyType, target, uriToProxy).map({
                case Success(result) => Right(result)
                case Failure(err) =>
                  logger.error("Could not run proxying: ", err)
                  Left(err.toString)
              })
            })
          case None=>
            Future(Left("No transcode info on this job"))
        }

    })
  }