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")))
}
})
}}