def restoreBackup()

in app/controllers/ProjectEntryController.scala [1150:1186]


  def restoreBackup(requestedId: Int, requestedVersion: Int) = IsAuthenticatedAsync {uid=>{request=>
    implicit val db = dbConfig.db

    selectid(requestedId).flatMap({
      case Failure(error)=>
        logger.error(s"Could not restore file for project ${requestedId}",error)
        Future(InternalServerError(Json.obj("status"->"error","detail"->error.toString)))
      case Success(someSeq)=>
        someSeq.headOption match {
          case Some(projectEntry)=>
            val fileData = for {
              f1 <- projectEntry.associatedFiles(false).map(fileList=>fileList(0))
            } yield (f1)
            val fileToSaveOver = Await.result(fileData, Duration(10, TimeUnit.SECONDS))
            val fileDataTwo = for {
              f2 <- projectEntry.associatedFiles(true).map(fileList=>fileList)
            } yield (f2)
            val fileEntryDataTwo = Await.result(fileDataTwo, Duration(10, TimeUnit.SECONDS))
            var versionFound = 0
            var filePlace = 0
            val timestamp = dateTimeToTimestamp(ZonedDateTime.now())
            var fileToLoad = FileEntry(None, "", 1, "", 1, timestamp, timestamp, timestamp, false, false, None, None)

            while (versionFound == 0) {
              if ((!fileEntryDataTwo(filePlace).backupOf.isEmpty) && (fileEntryDataTwo(filePlace).version == requestedVersion)) {
                fileToLoad = fileEntryDataTwo(filePlace)
                versionFound = 1
              }
              filePlace = filePlace + 1
            }
            storageHelper.copyFile(fileToLoad, fileToSaveOver)
            Future(Ok(Json.obj("status"->"okay","detail"->s"Restored file for project $requestedId from version $requestedVersion")))
          case None=>
            Future(NotFound(Json.obj("status"->"error","detail"->s"Project $requestedId not found")))
        }
    })
  }}