def checkRestoreStatus()

in app/controllers/LightboxController.scala [235:265]


  def checkRestoreStatus(user:String, fileId:String) = IsAuthenticatedAsync { claims=> request=>
    implicit val timeout:akka.util.Timeout = 60 seconds

    withTargetUserProfile(request, user) { userProfile=>
      lightboxEntryDAO.get(userProfile.userEmail, fileId).flatMap({
        case None=>
          Future(NotFound(GenericErrorResponse("not_found","This item is not in your lightbox").asJson))
        case Some(Left(err))=>
          Future(InternalServerError(GenericErrorResponse("db_error", err.toString).asJson))
        case Some(Right(lbEntry))=>
          val response = (glacierRestoreActor ? GlacierRestoreActor.CheckRestoreStatus(lbEntry)).mapTo[GlacierRestoreActor.GRMsg]
          response.map({
            case GlacierRestoreActor.ItemLost(_)=>
              NotFound(GenericErrorResponse("not_found","Item must have gone away").asJson)
            case GlacierRestoreActor.NotInArchive(entry)=>
              Ok(RestoreStatusResponse("ok",entry.id, RestoreStatus.RS_UNNEEDED, None, None).asJson)
            case GlacierRestoreActor.RestoreCompleted(entry, expiry)=>
              Ok(RestoreStatusResponse("ok", entry.id, RestoreStatus.RS_SUCCESS, Some(expiry), None).asJson)
            case GlacierRestoreActor.RestoreInProgress(entry)=>
              Ok(RestoreStatusResponse("ok", entry.id, RestoreStatus.RS_UNDERWAY, None, None).asJson)
            case GlacierRestoreActor.RestoreNotRequested(entry)=>
              val restoreStatus = if(entry.storageClass==StorageClass.GLACIER) {
                RestoreStatus.RS_EXPIRED
              } else {
                RestoreStatus.RS_UNNEEDED
              }
              Ok(RestoreStatusResponse("not_requested", entry.id, restoreStatus, None, None).asJson)
          })
      })
    }
  }