in formstack-baton-requests/src/main/scala/com/gu/identity/formstackbatonrequests/updatedynamo/UpdateDynamoHandler.scala [39:72]
def update(token: FormstackAccountToken, formPage: Int, count: Int, timeOfStart: LocalDateTime, maxUpdateSeconds: Option[Int], context: Context): Either[Throwable, UpdateStatus] = {
dynamoClient.mostRecentTimestamp(config.lastUpdatedTableName, token.account).flatMap { lastUpdate =>
val lastUpdateTimestamp = lastUpdate.asLocalTimestamp
if (lastUpdateTimestamp.toLocalDate != getCurrentTimestamp().toLocalDate) {
val maybeMaxUpdateTime: Option[LocalDateTime] = maxUpdateSeconds.flatMap { maxSecs =>
val maxTimestamp = lastUpdateTimestamp.plusSeconds(maxSecs)
if (maxTimestamp.isBefore(timeOfStart)) {
Some(maxTimestamp)
}
else {
logger.info(s"ignoring maxUpdateSeconds as last update timestamp (${lastUpdate.date}) + maxUpdateSeconds ($maxSecs) is $maxTimestamp which is after the time of execution start $timeOfStart")
None
}
}
val withMaxLogMsg = maybeMaxUpdateTime.map(d=> s"Updating Dynamo table with requests between ${lastUpdate.date} and ${d}")
logger.info(withMaxLogMsg.getOrElse(s"Updating Dynamo table with requests since $lastUpdate"))
for {
status <- dynamoUpdateService.updateSubmissionsTable(formPage, lastUpdateTimestamp, maybeMaxUpdateTime, count, token, context)
_ <- if (status.completed) {
val newLastUpdatedDate = maybeMaxUpdateTime.getOrElse(timeOfStart)
dynamoClient.updateMostRecentTimestamp(config.lastUpdatedTableName, token.account, newLastUpdatedDate)
} else Right(())
} yield status
} else {
logger.info("skipping dynamodb update as it was already updated today")
Right(UpdateStatus(completed = true, None, None, token))
}
}
}