private def doEstimation()

in lambda/src/main/scala/pricemigrationengine/handlers/EstimationHandler.scala [101:125]


  private def doEstimation(
      catalogue: ZuoraProductCatalogue,
      item: CohortItem,
      cohortSpec: CohortSpec,
      today: LocalDate,
  ): ZIO[Zuora, Failure, EstimationData] = {
    for {
      subscription <-
        Zuora
          .fetchSubscription(item.subscriptionName)
          .filterOrFail(_.status != "Cancelled")(CancelledSubscriptionFailure(item.subscriptionName))
      account <- Zuora.fetchAccount(subscription.accountNumber, subscription.subscriptionNumber)
      invoicePreviewTargetDate = cohortSpec.earliestPriceMigrationStartDate.plusMonths(16)
      invoicePreview <- Zuora.fetchInvoicePreview(subscription.accountId, invoicePreviewTargetDate)
      startDateLowerBound <- StartDates.startDateLowerBound(
        subscription,
        invoicePreview,
        cohortSpec,
        today
      )
      result <- ZIO.fromEither(
        EstimationResult(account, catalogue, subscription, invoicePreview, startDateLowerBound, cohortSpec)
      )
    } yield result
  }