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
}