From 2798022326ca3e06edb84ecb585948183f781255 Mon Sep 17 00:00:00 2001 From: Kelvin Chappell Date: Tue, 13 Aug 2019 16:03:43 +0100 Subject: [PATCH] Move holiday-stop credit calculation --- build.sbt | 13 +++++++-- handlers/holiday-stop-processor/build.sbt | 5 ---- .../com/gu/holidaystopprocessor/Handler.scala | 1 + .../HolidayStopProcess.scala | 4 ++- .../NextBillingPeriodStartDate.scala | 2 ++ .../holidaystopprocessor/ProcessResult.scala | 1 + .../gu/holidaystopprocessor/Salesforce.scala | 1 + .../holidaystopprocessor/StandaloneApp.scala | 2 ++ .../ErrorHandlingSpec.scala | 2 ++ .../gu/holidaystopprocessor/Fixtures.scala | 1 + .../HolidayCreditSpec.scala | 1 + .../HolidayCreditTest.scala | 1 + .../HolidayStopProcessTest.scala | 1 + .../SubscriptionTest.scala | 1 + .../SubscriptionUpdateTest.scala | 1 + .../com/gu/holiday_stops}/AccessToken.scala | 2 +- .../scala/com/gu/holiday_stops}/Config.scala | 3 +- .../gu/holiday_stops/CreditCalculator.scala | 16 +++++++++++ .../CurrentGuardianWeeklySubscription.scala | 4 ++- .../com/gu/holiday_stops}/ExtendedTerm.scala | 2 +- .../com/gu/holiday_stops}/Failures.scala | 2 +- .../com/gu/holiday_stops}/HolidayCredit.scala | 2 +- .../holiday_stops}/HolidayCreditUpdate.scala | 6 ++-- .../com/gu/holiday_stops}/HolidayStop.scala | 2 +- .../com/gu/holiday_stops}/Subscription.scala | 28 ++++++------------- .../scala/com/gu/holiday_stops}/Zuora.scala | 2 +- .../holiday_stops}/ZuoraStatusResponse.scala | 2 +- project/Dependencies.scala | 7 +++++ 28 files changed, 76 insertions(+), 39 deletions(-) rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/AccessToken.scala (56%) rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/Config.scala (99%) create mode 100644 lib/holiday-stops/src/main/scala/com/gu/holiday_stops/CreditCalculator.scala rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/CurrentGuardianWeeklySubscription.scala (99%) rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/ExtendedTerm.scala (95%) rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/Failures.scala (95%) rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/HolidayCredit.scala (96%) rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/HolidayCreditUpdate.scala (94%) rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/HolidayStop.scala (95%) rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/Subscription.scala (59%) rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/Zuora.scala (98%) rename {handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor => lib/holiday-stops/src/main/scala/com/gu/holiday_stops}/ZuoraStatusResponse.scala (82%) diff --git a/build.sbt b/build.sbt index 3f98cbc813..43e3c6f9d6 100644 --- a/build.sbt +++ b/build.sbt @@ -94,8 +94,17 @@ lazy val `holiday-stops` = all(project in file("lib/holiday-stops")) testDep ) .settings( - libraryDependencies ++= Seq(okhttp3, scalaz, playJson, scalatest, playJsonExtensions) ++ logging -) + libraryDependencies ++= + Seq(okhttp3, + scalaz, + playJson, + scalatest, + playJsonExtensions, + circe, + circeParser, + sttp, + sttpCirce) ++ logging + ) lazy val restHttp = all(project in file("lib/restHttp")) .settings( diff --git a/handlers/holiday-stop-processor/build.sbt b/handlers/holiday-stop-processor/build.sbt index fbf8d20341..b79da80656 100644 --- a/handlers/holiday-stop-processor/build.sbt +++ b/handlers/holiday-stop-processor/build.sbt @@ -12,13 +12,8 @@ riffRaffUploadManifestBucket := Option("riffraff-builds") riffRaffManifestProjectName := s"MemSub::Membership Admin::${name.value}" riffRaffArtifactResources += (file(s"handlers/${name.value}/cfn.yaml"), "cfn/cfn.yaml") -val sttpVersion = "1.5.17" - libraryDependencies ++= Seq( "io.github.mkotsur" %% "aws-lambda-scala" % "0.1.1", - "com.softwaremill.sttp" %% "core" % sttpVersion, - "com.softwaremill.sttp" %% "circe" % sttpVersion, - "io.circe" %% "circe-generic" % "0.11.1", "com.amazonaws" % "aws-java-sdk-s3" % "1.11.566", "org.slf4j" % "slf4j-api" % "1.7.25", "ch.qos.logback" % "logback-classic" % "1.2.3", diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Handler.scala b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Handler.scala index 4eb7d3aa78..3f151391b0 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Handler.scala +++ b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Handler.scala @@ -4,6 +4,7 @@ import java.time.LocalDate import cats.implicits._ import com.amazonaws.services.lambda.runtime.Context +import com.gu.holiday_stops.Config import io.circe.generic.auto._ import io.github.mkotsur.aws.handler.Lambda import io.github.mkotsur.aws.handler.Lambda._ diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayStopProcess.scala b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayStopProcess.scala index 4e184aa51d..ae34110c35 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayStopProcess.scala +++ b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayStopProcess.scala @@ -1,7 +1,9 @@ package com.gu.holidaystopprocessor import java.time.LocalDate + import cats.implicits._ +import com.gu.holiday_stops._ import com.gu.salesforce.holiday_stops.SalesforceHolidayStopRequestsDetail._ object HolidayStopProcess { @@ -65,7 +67,7 @@ object HolidayStopProcess { currentGuardianWeeklySubscription <- CurrentGuardianWeeklySubscription(subscription, guardianWeeklyProductRatePlanIds) nextInvoiceStartDate = NextBillingPeriodStartDate(currentGuardianWeeklySubscription) maybeExtendedTerm = ExtendedTerm(nextInvoiceStartDate, subscription) - holidayCredit = HolidayCredit(currentGuardianWeeklySubscription) + holidayCredit <- CreditCalculator.guardianWeeklyCredit(guardianWeeklyProductRatePlanIds)(subscription) holidayCreditUpdate <- HolidayCreditUpdate(holidayCreditProduct, subscription, stop.stoppedPublicationDate, nextInvoiceStartDate, maybeExtendedTerm, holidayCredit) _ <- if (subscription.hasHolidayStop(stop)) Right(()) else updateSubscription(subscription, holidayCreditUpdate) updatedSubscription <- getSubscription(stop.subscriptionName) diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/NextBillingPeriodStartDate.scala b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/NextBillingPeriodStartDate.scala index 879729e55d..d20e8e2b63 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/NextBillingPeriodStartDate.scala +++ b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/NextBillingPeriodStartDate.scala @@ -2,6 +2,8 @@ package com.gu.holidaystopprocessor import java.time.LocalDate +import com.gu.holiday_stops.CurrentGuardianWeeklySubscription + /** * Holiday credit is applied to the next invoice on the first day of the next billing period. * diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/ProcessResult.scala b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/ProcessResult.scala index 9b9214fc08..a188ce9f55 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/ProcessResult.scala +++ b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/ProcessResult.scala @@ -1,5 +1,6 @@ package com.gu.holidaystopprocessor +import com.gu.holiday_stops.{HolidayStop, OverallFailure, ZuoraHolidayWriteError} import com.typesafe.scalalogging.LazyLogging case class ProcessResult(holidayStopsToApply: List[HolidayStop], holidayStopResults: List[Either[ZuoraHolidayWriteError, HolidayStopResponse]], resultsToExport: List[HolidayStopResponse], overallFailure: Option[OverallFailure]) diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Salesforce.scala b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Salesforce.scala index 7ae68c17cc..8b752feb2d 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Salesforce.scala +++ b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Salesforce.scala @@ -10,6 +10,7 @@ import com.gu.salesforce.holiday_stops.SalesforceHolidayStopRequestsDetail._ import com.gu.util.resthttp.JsonHttp import scalaz.{-\/, \/-} import com.gu.holiday_stops.ActionCalculator.suspensionConstantsByProduct +import com.gu.holiday_stops.{OverallFailure, SalesforceHolidayWriteError} object Salesforce { diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/StandaloneApp.scala b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/StandaloneApp.scala index 2f82cd6c3e..4d92076fa8 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/StandaloneApp.scala +++ b/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/StandaloneApp.scala @@ -2,6 +2,8 @@ package com.gu.holidaystopprocessor import java.time.LocalDate +import com.gu.holiday_stops.Config + // This is just for functional testing locally. object StandaloneApp extends App { diff --git a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/ErrorHandlingSpec.scala b/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/ErrorHandlingSpec.scala index 351be5d83d..9199c0b950 100644 --- a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/ErrorHandlingSpec.scala +++ b/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/ErrorHandlingSpec.scala @@ -1,7 +1,9 @@ package com.gu.holidaystopprocessor import java.time.LocalDate + import cats.implicits._ +import com.gu.holiday_stops.{HolidayCreditUpdate, OverallFailure, SalesforceHolidayWriteError, Subscription, ZuoraHolidayWriteError} import com.gu.holidaystopprocessor.Fixtures._ import com.gu.salesforce.holiday_stops.SalesforceHolidayStopRequestsDetail.{HolidayStopRequestsDetail, ProductName, SubscriptionName} import org.scalatest._ diff --git a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/Fixtures.scala b/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/Fixtures.scala index 249970e521..3450500613 100644 --- a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/Fixtures.scala +++ b/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/Fixtures.scala @@ -2,6 +2,7 @@ package com.gu.holidaystopprocessor import java.time.LocalDate +import com.gu.holiday_stops.{Config, HolidayCreditProduct, HolidayStop, HolidayStopProcessor, Oauth, RatePlan, RatePlanCharge, Subscription, ZuoraConfig} import com.gu.salesforce.SalesforceAuthenticate.SFAuthConfig import com.gu.salesforce.holiday_stops.SalesforceHolidayStopRequest._ import com.gu.salesforce.holiday_stops.SalesforceHolidayStopRequestsDetail._ diff --git a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayCreditSpec.scala b/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayCreditSpec.scala index 18ac40b694..b247b6a722 100644 --- a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayCreditSpec.scala +++ b/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayCreditSpec.scala @@ -2,6 +2,7 @@ package com.gu.holidaystopprocessor import java.time.LocalDate +import com.gu.holiday_stops.{Config, CurrentGuardianWeeklySubscription, HolidayCredit, RatePlan, RatePlanCharge} import org.scalacheck.Prop.forAll import org.scalacheck._ import org.scalatest.{EitherValues, OptionValues} diff --git a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayCreditTest.scala b/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayCreditTest.scala index ecf7e8e371..f183ec581f 100644 --- a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayCreditTest.scala +++ b/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayCreditTest.scala @@ -1,5 +1,6 @@ package com.gu.holidaystopprocessor +import com.gu.holiday_stops.{CurrentGuardianWeeklySubscription, HolidayCredit, RatePlan} import org.scalatest.{EitherValues, FlatSpec, Matchers} class HolidayCreditTest extends FlatSpec with Matchers with EitherValues { diff --git a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayStopProcessTest.scala b/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayStopProcessTest.scala index 995c085891..403d1fa80c 100644 --- a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayStopProcessTest.scala +++ b/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/HolidayStopProcessTest.scala @@ -2,6 +2,7 @@ package com.gu.holidaystopprocessor import java.time.LocalDate +import com.gu.holiday_stops.{HolidayCreditUpdate, HolidayStop, OverallFailure, SalesforceHolidayWriteError, Subscription, ZuoraHolidayWriteError} import com.gu.holidaystopprocessor.Fixtures.{config, mkSubscription} import com.gu.salesforce.holiday_stops.SalesforceHolidayStopRequestsDetail.{HolidayStopRequestsDetail, HolidayStopRequestsDetailChargeCode, HolidayStopRequestsDetailChargePrice, HolidayStopRequestsDetailId, ProductName, StoppedPublicationDate, SubscriptionName} import org.scalatest.{EitherValues, FlatSpec, Matchers, OptionValues} diff --git a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/SubscriptionTest.scala b/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/SubscriptionTest.scala index 92b5b1aefb..760ba1f8a8 100644 --- a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/SubscriptionTest.scala +++ b/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/SubscriptionTest.scala @@ -2,6 +2,7 @@ package com.gu.holidaystopprocessor import java.time.LocalDate +import com.gu.holiday_stops.RatePlanCharge import org.scalatest.{FlatSpec, Matchers, OptionValues} class SubscriptionTest extends FlatSpec with Matchers with OptionValues { diff --git a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/SubscriptionUpdateTest.scala b/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/SubscriptionUpdateTest.scala index d0aa614e70..79be53671a 100644 --- a/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/SubscriptionUpdateTest.scala +++ b/handlers/holiday-stop-processor/src/test/scala/com/gu/holidaystopprocessor/SubscriptionUpdateTest.scala @@ -2,6 +2,7 @@ package com.gu.holidaystopprocessor import java.time.LocalDate +import com.gu.holiday_stops.{Add, ChargeOverride, CurrentGuardianWeeklySubscription, ExtendedTerm, HolidayCredit, HolidayCreditUpdate, ZuoraHolidayWriteError} import com.gu.holidaystopprocessor.Fixtures.config import org.scalatest.{EitherValues, FlatSpec, Matchers} diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/AccessToken.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/AccessToken.scala similarity index 56% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/AccessToken.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/AccessToken.scala index 0169fc3fea..cd8402ae12 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/AccessToken.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/AccessToken.scala @@ -1,3 +1,3 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops case class AccessToken(access_token: String) diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Config.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Config.scala similarity index 99% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Config.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Config.scala index b890a31df4..951dd407b0 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Config.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Config.scala @@ -1,8 +1,9 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops import com.amazonaws.auth.profile.ProfileCredentialsProvider import com.amazonaws.regions.Regions.EU_WEST_1 import com.amazonaws.services.s3.AmazonS3Client +import com.gu.holiday_stops.OverallFailure import com.gu.salesforce.SalesforceAuthenticate.SFAuthConfig import io.circe.Decoder import io.circe.generic.auto._ diff --git a/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/CreditCalculator.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/CreditCalculator.scala new file mode 100644 index 0000000000..694652751f --- /dev/null +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/CreditCalculator.scala @@ -0,0 +1,16 @@ +package com.gu.holiday_stops + +import com.gu.salesforce.holiday_stops.SalesforceHolidayStopRequestsDetail.SubscriptionName + +object CreditCalculator { + + def guardianWeeklyCredit(config: Config, subscriptionName: SubscriptionName): Either[HolidayError, Double] = + for { + accessToken <- Zuora.accessTokenGetResponse(config.zuoraConfig) + subscription <- Zuora.subscriptionGetResponse(config, accessToken)(subscriptionName) + credit <- guardianWeeklyCredit(config.guardianWeeklyProductRatePlanIds)(subscription) + } yield credit + + def guardianWeeklyCredit(guardianWeeklyProductRatePlanIds: List[String])(subscription: Subscription): Either[ZuoraHolidayWriteError, Double] = + CurrentGuardianWeeklySubscription(subscription, guardianWeeklyProductRatePlanIds).map(HolidayCredit(_)) +} diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/CurrentGuardianWeeklySubscription.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/CurrentGuardianWeeklySubscription.scala similarity index 99% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/CurrentGuardianWeeklySubscription.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/CurrentGuardianWeeklySubscription.scala index 80a6cbdea4..5839400d22 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/CurrentGuardianWeeklySubscription.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/CurrentGuardianWeeklySubscription.scala @@ -1,6 +1,7 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops import java.time.LocalDate + import scala.util.Try /** @@ -95,6 +96,7 @@ case class CurrentInvoicedPeriod( * attached to Guardian Weekly product that satisfies all of the CurrentGuardianWeeklyRatePlanPredicates. */ object CurrentGuardianWeeklySubscription { + def apply(subscription: Subscription, guardianWeeklyProductRatePlanIds: List[String]): Either[ZuoraHolidayWriteError, CurrentGuardianWeeklySubscription] = subscription .ratePlans diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/ExtendedTerm.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/ExtendedTerm.scala similarity index 95% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/ExtendedTerm.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/ExtendedTerm.scala index 87021f5cb4..91ef34d014 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/ExtendedTerm.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/ExtendedTerm.scala @@ -1,4 +1,4 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops import java.time.LocalDate import java.time.temporal.ChronoUnit.DAYS diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Failures.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Failures.scala similarity index 95% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Failures.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Failures.scala index ebd76bc302..127a6b0ed1 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Failures.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Failures.scala @@ -1,4 +1,4 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops sealed trait HolidayError { val reason: String diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayCredit.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/HolidayCredit.scala similarity index 96% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayCredit.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/HolidayCredit.scala index cb5c58d53f..52ab95d96c 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayCredit.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/HolidayCredit.scala @@ -1,4 +1,4 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops import scala.math.BigDecimal.RoundingMode diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayCreditUpdate.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/HolidayCreditUpdate.scala similarity index 94% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayCreditUpdate.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/HolidayCreditUpdate.scala index 155975732d..c9b183ba9c 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayCreditUpdate.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/HolidayCreditUpdate.scala @@ -1,7 +1,9 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops import java.time.LocalDate +import com.gu.holiday_stops + case class HolidayCreditUpdate( currentTerm: Option[Int], currentTermPeriodType: Option[String], @@ -24,7 +26,7 @@ object HolidayCreditUpdate { holidayCredit: Double ): Either[ZuoraHolidayWriteError, HolidayCreditUpdate] = { Right( - HolidayCreditUpdate( + holiday_stops.HolidayCreditUpdate( currentTerm = maybeExtendedTerm.map(_.length), currentTermPeriodType = maybeExtendedTerm.map(_.unit), List( diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayStop.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/HolidayStop.scala similarity index 95% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayStop.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/HolidayStop.scala index 08b7d5642b..29f9cc74a6 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/HolidayStop.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/HolidayStop.scala @@ -1,4 +1,4 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops import java.time.LocalDate diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Subscription.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Subscription.scala similarity index 59% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Subscription.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Subscription.scala index aaaa08e788..bc2d2ba928 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Subscription.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Subscription.scala @@ -1,4 +1,4 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops import java.time.LocalDate @@ -12,32 +12,22 @@ case class Subscription( ratePlans: List[RatePlan] ) { - val originalRatePlanCharge: Option[RatePlanCharge] = { - val chronologicallyOrderedRatePlans = ratePlans.sortBy { plan => - plan.ratePlanCharges.map(_.effectiveStartDate.toString).headOption.getOrElse("") - } - for { - ratePlan <- chronologicallyOrderedRatePlans.headOption - charge <- ratePlan.ratePlanCharges.headOption - } yield charge - } - def ratePlanCharge(stop: HolidayStop): Option[RatePlanCharge] = { def isMatchingPlan(plan: RatePlan): Boolean = plan.productName == "Discounts" def isMatchingCharge(charge: RatePlanCharge): Boolean = charge.name == "Holiday Credit" && - charge.HolidayStart__c.exists { start => - start.isEqual(stop.stoppedPublicationDate) || start.isBefore(stop.stoppedPublicationDate) - } && - charge.HolidayEnd__c.exists { end => - end.isEqual(stop.stoppedPublicationDate) || end.isAfter(stop.stoppedPublicationDate) - } + charge.HolidayStart__c.exists { start => + start.isEqual(stop.stoppedPublicationDate) || start.isBefore(stop.stoppedPublicationDate) + } && + charge.HolidayEnd__c.exists { end => + end.isEqual(stop.stoppedPublicationDate) || end.isAfter(stop.stoppedPublicationDate) + } val charges = for { plan <- ratePlans if isMatchingPlan(plan) - charge <- plan.ratePlanCharges.find(isMatchingCharge) + charge <- plan.ratePlanCharges.find(isMatchingCharge) } yield charge charges.headOption } @@ -63,5 +53,3 @@ case class RatePlanCharge( HolidayEnd__c: Option[LocalDate], processedThroughDate: Option[LocalDate], ) - - diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Zuora.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Zuora.scala similarity index 98% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Zuora.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Zuora.scala index 3ccb3f3bca..a918e5c646 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/Zuora.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/Zuora.scala @@ -1,4 +1,4 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops import com.gu.salesforce.holiday_stops.SalesforceHolidayStopRequestsDetail.SubscriptionName import com.softwaremill.sttp._ diff --git a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/ZuoraStatusResponse.scala b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/ZuoraStatusResponse.scala similarity index 82% rename from handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/ZuoraStatusResponse.scala rename to lib/holiday-stops/src/main/scala/com/gu/holiday_stops/ZuoraStatusResponse.scala index 24a3d05d9f..77efe39960 100644 --- a/handlers/holiday-stop-processor/src/main/scala/com/gu/holidaystopprocessor/ZuoraStatusResponse.scala +++ b/lib/holiday-stops/src/main/scala/com/gu/holiday_stops/ZuoraStatusResponse.scala @@ -1,4 +1,4 @@ -package com.gu.holidaystopprocessor +package com.gu.holiday_stops case class ZuoraStatusResponse( success: Boolean, diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 23cfe6c911..e17076617b 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -4,6 +4,9 @@ object Dependencies { val awsVersion = "1.11.574" + val circeVersion = "0.11.1" + val sttpVersion = "1.5.17" + val okhttp3 = "com.squareup.okhttp3" % "okhttp" % "3.9.1" val logging = Seq( "ch.qos.logback" % "logback-classic" % "1.2.3", @@ -19,4 +22,8 @@ object Dependencies { val awsSES = "com.amazonaws" % "aws-java-sdk-ses" % awsVersion val awsLambda = "com.amazonaws" % "aws-lambda-java-core" % "1.2.0" val supportInternationalisation = "com.gu" %% "support-internationalisation" % "0.9" + val circe = "io.circe" %% "circe-generic" % circeVersion + val circeParser = "io.circe" %% "circe-parser" % circeVersion + val sttp = "com.softwaremill.sttp" %% "core" % sttpVersion + val sttpCirce = "com.softwaremill.sttp" %% "circe" % sttpVersion }