def getBulkDownload()

in app/controllers/BulkDownloadController.scala [122:158]


  def getBulkDownload(tokenId:String, notOnlyRushes:Option[Boolean]) = Action.async {
    serverTokenDAO.get(tokenId).flatMap({
      case None=>
        Future(NotFound(GenericErrorResponse("not_found","No such bulk download").asJson))
      case Some(token)=>
        serverTokenDAO.remove(tokenId).flatMap(_=> {
        token.associatedId match {
          case None=>
            logger.error(s"Token $tokenId is invalid, it does not contain a project ID")
            Future(NotFound(GenericErrorResponse("not_found","Invalid token").asJson))
          case Some(combinedId)=>
            val ids = combinedId.split("\\|")
            val projectId = ids.head
            val vaultId = ids(1)

            logger.debug(s"Combined ID is $combinedId, project ID is $projectId, vault ID is $vaultId")

            withVaultAsync(vaultId) { userInfo =>
              createRetrievalToken(token.createdForUser.getOrElse(""), combinedId).flatMap(retrievalToken=> {
                getContent(userInfo, projectId, !notOnlyRushes.getOrElse(false)).map({
                  case Right(synopses)=>
                    val meta = LightboxBulkEntry(projectId, s"Vaultdoor download for project $projectId", token.createdForUser.getOrElse(""), ZonedDateTime.now(), 0, synopses.length, 0)
                    Ok(BulkDownloadInitiateResponse("ok", meta, retrievalToken.value, synopses).asJson)
                  case Left(problem)=>
                    logger.warn(s"Could not complete bulk download for token $tokenId: $problem")
                    BadRequest(GenericErrorResponse("invalid", problem).asJson)
                })
              })
            }
          }
        }).recover({
          case err:Throwable=>
            logger.error(s"Could not get bulk download for token $tokenId: ", err)
            InternalServerError(GenericErrorResponse("error","Server failure, please check the logs").asJson)
        })
    })
  }