override def getSubscriptionStatusForUser()

in membership-attribute-service/app/services/MobileSubscriptionService.scala [29:56]


  override def getSubscriptionStatusForUser(
      identityId: String,
  )(implicit logPrefix: LogPrefix): Future[Either[String, Option[MobileSubscriptionStatus]]] = {
    val response = wsClient
      .url(s"$subscriptionURL/user/subscriptions/$identityId")
      .withHttpHeaders("Authorization" -> s"Bearer $mobileSubscriptionApiKey")
      .get()

    response.map { resp =>
      if (resp.status != 200) {
        Left(s"Unable to fetch the mobile subscription status for $identityId, got HTTP ${resp.status} ${resp.statusText}")
      } else {
        val parsedSubs = (resp.json \ "subscriptions")
          .validate[List[MobileSubscriptionStatus]]

        parsedSubs match {
          case JsError(errors) => Left(s"Unable to parse mobile subscription response: $errors")
          case JsSuccess(subs, _) =>
            logger.info(s"Successfully retrieved ${subs.size} mobile subscriptions for $identityId")
            val mostRecentValidSub = subs.filter(_.valid).sortBy(_.to).lastOption
            val mostRecentInvalidSub = subs.filterNot(_.valid).sortBy(_.to).lastOption
            val result = mostRecentValidSub.orElse(mostRecentInvalidSub)
            logger.info(s"Mobile subscription for $identityId is $result")
            Right(result)
        }
      }
    }
  }