def storeDeletionPending()

in media_remover/src/main/scala/helpers/PendingDeletionHelper.scala [80:109]


  def storeDeletionPending(msg: OnlineOutputMessage): Future[Either[String, Int]] =
    msg.originalFilePath match {
      case Some(filePath) =>
        Try {
          MediaTiers.withName(msg.mediaTier)
        } match {
          case Success(mediaTier) =>
            val recordMaybeFut = mediaTier match {
              case MediaTiers.ONLINE =>
                pendingDeletionRecordDAO.findByOnlineIdForONLINE(Ensurer.validateMediaId(msg.vidispineItemId))
              case MediaTiers.NEARLINE =>
                pendingDeletionRecordDAO.findByNearlineIdForNEARLINE(Ensurer.validateMediaId(msg.nearlineId))
            }
            recordMaybeFut.map({
              case Some(existingRecord) => existingRecord.copy(attempt = existingRecord.attempt + 1)
              case None =>
                PendingDeletionRecord(None, originalFilePath = filePath, nearlineId = msg.nearlineId, vidispineItemId = msg.vidispineItemId, mediaTier = mediaTier, attempt = 1)
            }).flatMap(rec => {
              pendingDeletionRecordDAO
                .writeRecord(rec)
                .map(recId => Right(recId))
            })
          case Failure(ex) =>
            logger.warn(s"Unexpected value for MediaTier: ${ex.getMessage}")
            Future.failed(new RuntimeException(s"Cannot store PendingDeletion, unexpected value for mediaTier: '${msg.mediaTier}"))
        }
      case None =>
        logger.warn(s"No filepath for ${msg.asJson}, no use storing a PendingDeletion; dropping message")
        Future.failed(new RuntimeException("Cannot store PendingDeletion record for item without filepath"))
    }