Skip to content

Commit

Permalink
adding versioning for potential holiday stops endpoint to support price
Browse files Browse the repository at this point in the history
  • Loading branch information
frj committed Aug 27, 2019
1 parent 2798022 commit 2cf036f
Showing 1 changed file with 32 additions and 11 deletions.
Expand Up @@ -56,13 +56,14 @@ object Handler extends Logging {
sfAuthConfig <- loadConfig[SFAuthConfig].toApiGatewayOp("load sfAuth config")
sfClient <- SalesforceClient(response, sfAuthConfig).value.toDisjunction.toApiGatewayOp("authenticate with SalesForce")
} yield Operation.noHealthcheck( // checking connectivity to SF is sufficient healthcheck so no special steps required
request => (request.httpMethod match { // TODO will need to match against path params too to support edit endpoint
case Some("GET") => request.queryStringParameters match {
case Some(_) => stepsForPotentialHolidayStop _
case None => stepsToListExisting _
}
case Some("POST") => stepsToCreate _
case Some("DELETE") => stepsToDelete _
request => ((request.httpMethod,
request.queryStringParameters,
request.headers.flatMap(_.get("API_ENDPOINT_VERSION"))) match { // TODO will need to match against path params too to support edit endpoint
case (Some("GET"), Some(_), Some("2.0")) => stepsForPotentialHolidayStopV2 _
case (Some("GET"), Some(_), _) => stepsForPotentialHolidayStopV1 _
case (Some("GET"), None, _) => stepsToListExisting _
case (Some("POST"), _, _) => stepsToCreate _
case (Some("DELETE"), _, _) => stepsToDelete _
case _ => unsupported _
})(request, sfClient))

Expand All @@ -71,19 +72,39 @@ object Handler extends Logging {
private val HEADER_IDENTITY_ID = "x-identity-id"
private val HEADER_PRODUCT_NAME_PREFIX = "x-product-name-prefix"

case class PotentialHolidayStopParams(startDate: LocalDate, endDate: LocalDate)
def stepsForPotentialHolidayStop(req: ApiGatewayRequest, unused: SfClient): ApiResponse = {
case class PotentialHolidayStopParamsV1(startDate: LocalDate, endDate: LocalDate)
def stepsForPotentialHolidayStopV1(req: ApiGatewayRequest, unused: SfClient): ApiResponse = {
implicit val formatLocalDateAsSalesforceDate: Format[LocalDate] = SalesforceHolidayStopRequest.formatLocalDateAsSalesforceDate
implicit val readsPotentialHolidayStopParams: Reads[PotentialHolidayStopParams] = Json.reads[PotentialHolidayStopParams]
implicit val readsPotentialHolidayStopParams: Reads[PotentialHolidayStopParamsV1] = Json.reads[PotentialHolidayStopParamsV1]
(for {
productNamePrefix <- req.headers.flatMap(_.get(HEADER_PRODUCT_NAME_PREFIX)).toApiGatewayOp("identityID header")
params <- req.queryParamsAsCaseClass[PotentialHolidayStopParams]()
params <- req.queryParamsAsCaseClass[PotentialHolidayStopParamsV1]()
} yield ApiGatewayResponse(
"200",
ActionCalculator.publicationDatesToBeStopped(params.startDate, params.endDate, ProductName(productNamePrefix))
)).apiResponse
}

case class PotentialHolidayStopsAffectedIssue(issueDate: LocalDate, estimatedPrice: Double)
case class PotentialHolidayStopsResponse(affectedIssues: List[PotentialHolidayStopsAffectedIssue])
case class PotentialHolidayStopParamsV2(startDate: LocalDate, endDate: LocalDate)
def stepsForPotentialHolidayStopV2(req: ApiGatewayRequest, unused: SfClient): ApiResponse = {
implicit val formatLocalDateAsSalesforceDate: Format[LocalDate] = SalesforceHolidayStopRequest.formatLocalDateAsSalesforceDate
implicit val formatPotentialHolidayStopsAffectedIssue: Format[PotentialHolidayStopsAffectedIssue] = Json.format[PotentialHolidayStopsAffectedIssue]
implicit val formatPotentialHolidayStopsResponse: Format[PotentialHolidayStopsResponse] = Json.format[PotentialHolidayStopsResponse]
implicit val readsPotentialHolidayStopParams: Reads[PotentialHolidayStopParamsV2] = Json.reads[PotentialHolidayStopParamsV2]
(for {
productNamePrefix <- req.headers.flatMap(_.get(HEADER_PRODUCT_NAME_PREFIX)).toApiGatewayOp("identityID header")
params <- req.queryParamsAsCaseClass[PotentialHolidayStopParamsV2]()
} yield ApiGatewayResponse(
"200",
PotentialHolidayStopsResponse(
ActionCalculator.publicationDatesToBeStopped(params.startDate, params.endDate, ProductName(productNamePrefix))
.map(PotentialHolidayStopsAffectedIssue(_, 1.23))
)
)).apiResponse
}

case class GetPathParams(subscriptionName: Option[SubscriptionName])

def stepsToListExisting(req: ApiGatewayRequest, sfClient: SfClient): ApiResponse = {
Expand Down

0 comments on commit 2cf036f

Please sign in to comment.