private def readSentTime()

in eventconsumer/src/main/scala/com/gu/notifications/events/dynamo/DynamoReportUpdater.scala [46:68]


  private def readSentTime(notificationId: String)(implicit dynamoDbClient: AmazonDynamoDBAsync): Future[Option[ZonedDateTime]] = {
    val getItemRequest = new GetItemRequest()
      .withTableName(tableName)
      .withKey(Map("id" -> new AttributeValue("id").withS(notificationId)).asJava)
    val promise = Promise[Option[ZonedDateTime]]()
    val handler = new AsyncHandler[GetItemRequest, GetItemResult] {
      override def onError(exception: Exception): Unit = promise.failure(new Exception(getItemRequest.toString, exception))

      override def onSuccess(request: GetItemRequest, result: GetItemResult): Unit = Try {
        Option(result.getItem).flatMap { item =>
          for {
            sentTime <- if (item.containsKey("sentTime")) Some(item.get("sentTime").getS) else None
            zonedSentTime <- Try(ZonedDateTime.parse(sentTime)).toOption
          } yield zonedSentTime
        }
      } match {
        case Success(value) => promise.success(value)
        case Failure(exception) => promise.failure(new Exception(request.toString, exception))
      }
    }
    dynamoDbClient.getItemAsync(getItemRequest, handler)
    promise.future
  }