From 1f47c3801ee362d49c675073c17a47fe562eb798 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pascal=20Honor=C3=A9?= Date: Mon, 21 Oct 2024 14:31:40 +0100 Subject: [PATCH] using the new orders api (with hardcoded values) --- .../model/ZuoraRenewOrderPayload.scala | 82 +++++++++++++++++++ .../services/ZuoraLive.scala | 53 ++++++++++-- 2 files changed, 130 insertions(+), 5 deletions(-) create mode 100644 lambda/src/main/scala/pricemigrationengine/model/ZuoraRenewOrderPayload.scala diff --git a/lambda/src/main/scala/pricemigrationengine/model/ZuoraRenewOrderPayload.scala b/lambda/src/main/scala/pricemigrationengine/model/ZuoraRenewOrderPayload.scala new file mode 100644 index 00000000..ed9b315e --- /dev/null +++ b/lambda/src/main/scala/pricemigrationengine/model/ZuoraRenewOrderPayload.scala @@ -0,0 +1,82 @@ +package pricemigrationengine.model + +import pricemigrationengine.migrations.GuardianWeeklyMigration +import pricemigrationengine.model.ChargeOverride.fromRatePlanCharge + +import java.time.LocalDate +import java.time.temporal.ChronoUnit.DAYS +import pricemigrationengine.model.Either._ +import pricemigrationengine.model.ZuoraProductCatalogue.productPricingMap +import upickle.default.{ReadWriter, macroRW} + +/* +{ + "orderDate": "2024-10-21", + "existingAccountNumber": "A01269270", + "subscriptions": [ + { + "subscriptionNumber": "A-S01310226", + "orderActions": [ + { + "type": "RenewSubscription", + "triggerDates": [ + { + "name": "ContractEffective", + "triggerDate": "2024-10-21" + }, + { + "name": "ServiceActivation", + "triggerDate": "2024-10-21" + }, + { + "name": "CustomerAcceptance", + "triggerDate": "2024-10-21" + } + ] + } + ] + } + ], + "processingOptions": { + "runBilling": false, + "collectPayment": false + } +} + */ + +case class ZuoraRenewOrderPayloadOrderActionTriggerDate(name: String, triggerDate: LocalDate) +object ZuoraRenewOrderPayloadOrderActionTriggerDate { + implicit val rwZuoraRenewOrderPayloadOrderActionTriggerDate + : ReadWriter[ZuoraRenewOrderPayloadOrderActionTriggerDate] = macroRW +} + +case class ZuoraRenewOrderPayloadOrderAction( + `type`: String, + triggerDates: List[ZuoraRenewOrderPayloadOrderActionTriggerDate] +) +object ZuoraRenewOrderPayloadOrderAction { + implicit val rwZuoraRenewOrderPayloadOrderAction: ReadWriter[ZuoraRenewOrderPayloadOrderAction] = macroRW +} + +case class ZuoraRenewOrderPayloadSubscription( + subscriptionNumber: String, + orderActions: List[ZuoraRenewOrderPayloadOrderAction] +) +object ZuoraRenewOrderPayloadSubscription { + implicit val rwZuoraRenewOrderPayloadSubscription: ReadWriter[ZuoraRenewOrderPayloadSubscription] = macroRW +} + +case class ZuoraRenewOrderPayloadProcessingOptions(runBilling: Boolean, collectPayment: Boolean) +object ZuoraRenewOrderPayloadProcessingOptions { + implicit val rwZuoraRenewOrderPayloadProcessingOptions: ReadWriter[ZuoraRenewOrderPayloadProcessingOptions] = macroRW +} + +case class ZuoraRenewOrderPayload( + orderDate: LocalDate, + existingAccountNumber: String, + subscriptions: List[ZuoraRenewOrderPayloadSubscription], + processingOptions: ZuoraRenewOrderPayloadProcessingOptions +) +object ZuoraRenewOrderPayload { + implicit val rwZuoraRenewOrderPayload: ReadWriter[ZuoraRenewOrderPayload] = macroRW +} diff --git a/lambda/src/main/scala/pricemigrationengine/services/ZuoraLive.scala b/lambda/src/main/scala/pricemigrationengine/services/ZuoraLive.scala index 3c90c468..96813fb8 100644 --- a/lambda/src/main/scala/pricemigrationengine/services/ZuoraLive.scala +++ b/lambda/src/main/scala/pricemigrationengine/services/ZuoraLive.scala @@ -208,16 +208,59 @@ object ZuoraLive { ) } - override def renewSubscription(subscriptionNumber: String): ZIO[Any, ZuoraRenewalFailure, Unit] = + override def renewSubscription(subscriptionNumber: String): ZIO[Any, ZuoraRenewalFailure, Unit] = { + + val triggerDates = List( + ZuoraRenewOrderPayloadOrderActionTriggerDate( + "ContractEffective", + LocalDate.of(2024, 10, 21) + ), // TODO: set correct date + ZuoraRenewOrderPayloadOrderActionTriggerDate( + "ServiceActivation", + LocalDate.of(2024, 10, 21) + ), // TODO: set correct date + ZuoraRenewOrderPayloadOrderActionTriggerDate( + "CustomerAcceptance", + LocalDate.of(2024, 10, 21) + ), // TODO: set correct date + ) + + val orderActions = List( + ZuoraRenewOrderPayloadOrderAction( + `type` = "RenewSubscription", + triggerDates = triggerDates + ) + ) + + val subscriptions = List( + ZuoraRenewOrderPayloadSubscription( + subscriptionNumber = subscriptionNumber, + orderActions = orderActions + ) + ) + + val processingOptions = ZuoraRenewOrderPayloadProcessingOptions(runBilling = false, collectPayment = false) + + val payload = ZuoraRenewOrderPayload( + orderDate = LocalDate.of(2024, 10, 21), // TODO: set correct date + existingAccountNumber = "A01269270", // TODO: set correct account number + subscriptions = subscriptions, + processingOptions = processingOptions + ) + retry( - put[Unit]( - path = s"subscriptions/${subscriptionNumber}/renew", - body = "{}" + post[Unit]( + path = s"v1/orders/", + body = write(payload) ).mapBoth( - e => ZuoraRenewalFailure(s"Failed to renew subscription number ${subscriptionNumber}"), + e => + ZuoraRenewalFailure( + s"Failed to renew subscription number ${subscriptionNumber} with payload: ${payload}" + ), response => () ) ) <* logging.info(s"renewed subscription ${subscriptionNumber}") + } } ) }