in handlers/product-move-api/src/main/scala/com/gu/productmove/endpoint/move/ProductMoveEndpoint.scala [48:147]
def main(args: Array[String]): Unit = LambdaEndpoint.runTest(
run(
SwitchType.RecurringContributionToSupporterPlus,
SubscriptionName("A-S00448793"),
ExpectedInput(1, false, None, None),
None,
),
)
val server: sttp.tapir.server.ServerEndpoint.Full[
Unit,
Unit,
(SwitchType, SubscriptionName, ProductMoveEndpointTypes.ExpectedInput, Option[IdentityId]),
Unit,
ProductMoveEndpointTypes.OutputBody,
Any,
Task,
] = {
val subscriptionNameCapture: EndpointInput.PathCapture[SubscriptionName] = {
EndpointInput.PathCapture[SubscriptionName](
Some("subscriptionName"),
implicitly,
EndpointIO.Info.empty.copy(
description = Some("Name of subscription to be moved to a different product."),
examples = List(Example(SubscriptionName("A-S000001"), None, None)),
), // A-S000001
)
}
given PlainCodec[SwitchType] =
Codec.derivedEnumeration[String, SwitchType](
id => SwitchType.values.find(_.id == id),
_.id,
)
val switchTypeCapture: EndpointInput.PathCapture[SwitchType] = {
EndpointInput.PathCapture[SwitchType](
Some("switchType"),
implicitly,
EndpointIO.Info.empty.copy(
description = Some("Switch type."),
examples = List(
Example(SwitchType.RecurringContributionToSupporterPlus, None, None),
Example(SwitchType.ToRecurringContribution, None, None),
),
), // A-S000001
)
}
val endpointDescription: PublicEndpoint[
(SwitchType, SubscriptionName, ProductMoveEndpointTypes.ExpectedInput, Option[IdentityId]),
Unit,
ProductMoveEndpointTypes.OutputBody,
Any,
] =
endpoint.post
.in("product-move")
.in(switchTypeCapture)
.in(subscriptionNameCapture)
.in(
jsonBody[ExpectedInput].copy(info =
EndpointIO.Info.empty[ExpectedInput].copy(description = Some("Definition of required movement.")),
),
)
.in(header[Option[IdentityId]]("x-identity-id"))
.out(
oneOf(
oneOfVariant(
sttp.model.StatusCode.Ok,
jsonBody[Success].copy(info = EndpointIO.Info.empty.copy(description = Some("Update Success."))),
),
oneOfVariant(
sttp.model.StatusCode.Ok,
jsonBody[PreviewResult].copy(info = EndpointIO.Info.empty.copy(description = Some("Preview result."))),
),
oneOfVariant(
sttp.model.StatusCode.InternalServerError,
jsonBody[InternalServerError]
.copy(info = EndpointIO.Info.empty.copy(description = Some("InternalServerError."))),
),
oneOfVariant(
sttp.model.StatusCode.BadRequest,
jsonBody[BadRequest]
.copy(info = EndpointIO.Info.empty.copy(description = Some("BadRequest."))),
),
oneOfVariant(
TransactionErrorStatusCode,
jsonBody[TransactionError]
.copy(info = EndpointIO.Info.empty.copy(description = Some("TransactionError."))),
),
),
)
.summary("Replaces the existing subscription with a new one.")
.description(
"""Cancels the existing subscription and replaces it with a new subscription
|to a different type of product.
|Also manages all the service comms associated with the movement.""".stripMargin,
)
endpointDescription.serverLogic[Task](run)
}