def create()

in handlers/product-move-api/src/main/scala/com/gu/productmove/zuora/Subscribe.scala [47:92]


  def create(
      zuoraAccountId: String,
      targetProductId: String,
  ): RIO[Subscribe with Stage, CreateSubscriptionResponse] =
    ZIO.serviceWithZIO[Subscribe](_.create(zuoraAccountId, targetProductId))
}

case class CreateSubscriptionResponse(subscriptionNumber: String)

given JsonDecoder[CreateSubscriptionResponse] = DeriveJsonDecoder.gen[CreateSubscriptionResponse]

case class ChargeOverrides(
    price: Option[BigDecimal] = None,
    productRatePlanChargeId: String,
    discountPercentage: Option[Int] = None,
    upToPeriods: Option[Int] = None,
    endDateCondition: Option[String] = None,
    triggerDate: Option[LocalDate] = None,
    triggerEvent: Option[String] = None,
)

given JsonEncoder[ChargeOverrides] = DeriveJsonEncoder.gen[ChargeOverrides]

case class ZuoraAccountId(value: String) extends AnyVal
case class CaseId(value: String) extends AnyVal
case class AcquisitionSource(value: String) extends AnyVal

case class SubscribeToRatePlans(productRatePlanId: String, chargeOverrides: List[ChargeOverrides] = List())

given JsonEncoder[SubscribeToRatePlans] = DeriveJsonEncoder.gen[SubscribeToRatePlans]

case class SubscribeRequest(
    accountKey: String,
    autoRenew: Boolean = true,
    contractEffectiveDate: LocalDate,
    customerAcceptanceDate: LocalDate,
    termType: String = "TERMED",
    renewalTerm: Int = 12,
    initialTerm: Int = 12,
    subscribeToRatePlans: List[SubscribeToRatePlans],
    AcquisitionCase__c: String,
    AcquisitionSource__c: String,
    CreatedByCSR__c: String,
)

object SubscribeRequest {