def assertSubscriptionBelongsToIdentityUser()

in handlers/product-move-api/src/main/scala/com/gu/productmove/endpoint/move/ProductMoveEndpointSteps.scala [18:38]


def assertSubscriptionBelongsToIdentityUser(
    getSubscription: GetSubscription,
    getAccount: GetAccount,
    subscriptionName: SubscriptionName,
    maybeIdentityId: Option[IdentityId],
): IO[Throwable | BadRequest, (GetSubscription.GetSubscriptionResponse, GetAccount.GetAccountResponse)] =
  for {
    subscription <- getSubscription.get(subscriptionName)
    account <- getAccount.get(subscription.accountNumber)
    _ <- (maybeIdentityId, account.basicInfo.IdentityId__c) match {
      case (None, _) => ZIO.unit
      case (Some(identityIdToCheck), Some(actualIdentityId)) if identityIdToCheck == actualIdentityId => ZIO.unit
      case (Some(identityIdToCheck), actual) =>
        for {
          _ <- ZIO.log(s"logged in identity id $identityIdToCheck doesn't match $actual on $subscriptionName")
          safeUserFacingMessage =
            s"logged in identity id $identityIdToCheck doesn't match the expected one for $subscriptionName"
          badRequest <- ZIO.fail(BadRequest(safeUserFacingMessage))
        } yield badRequest
    }
  } yield (subscription, account)