override def save()

in mobile-save-for-later/src/main/scala/com/gu/sfl/savedarticles/UpdateSavedArticles.scala [20:40]


  override def save(headers: Map[String, String], savedArticles: SavedArticles): Future[Either[SaveForLaterError, SavedArticles]] = {
    (for {
      identityHeaders <- getIdentityHeaders(headers)
    } yield {
      val eventualMaybeString = identityService.userFromRequest(identityHeaders, List(updateSelf))
      eventualMaybeString transformWith {
          case Success(Some(userId)) =>
            logger.debug(s"Storing ${savedArticles.numberOfArticles} articles for user $userId")
            Future.successful(savedArticlesMerger.updateWithRetryAndMerge(userId, savedArticles))
          case Success(_) =>
            logger.debug(s"Could not retrieve a user id for token: ${identityHeaders.auth}")
            Future.successful(Left(new UserNotFoundError("Could not retrieve a user id")))
          case Failure(OktaValidationException(e)) =>
            logger.debug(s"Error retrieving userId from okta oauth token")
            Future.successful(Left(OktaOauthValidationError(e.message, e)))
          case Failure(_) =>
            logger.debug(s"Error retrieving userId for: token: ${identityHeaders.accessToken}")
            Future.successful(Left(new IdentityServiceError("Could not retrieve a user from the id api")))
        }
     }).getOrElse(Future.successful(Left(new MissingAccessTokenError("No access token on request"))))
  }