def update()

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))
      }
    }
  }