in membership-attribute-service/app/controllers/AccountController.scala [330:356]
def updateCancellationReason(subscriptionName: String): Action[AnyContent] =
AuthorizeForScopes(requiredScopes = List(readSelf, updateSelf)).async { implicit request =>
import request.logPrefix
metrics.measureDuration("POST /user-attributes/me/update-cancellation-reason/:subscriptionName") {
val subName = memsub.Subscription.SubscriptionNumber(subscriptionName)
val services = request.touchpoint
val cancelForm = Form {
single("reason" -> nonEmptyText)
}
val identityId = request.user.identityId
val cancellationReasonOption = extractCancellationReason(cancelForm)
cancellationReasonOption match {
case Some(cancellationReason) =>
services.zuoraRestService.updateCancellationReason(subName, cancellationReason).map {
case -\/(error) =>
logger.error(scrub"Failed to update cancellation reason for user $identityId because $error")
InternalServerError(s"Failed to update cancellation reason with error: $error")
case \/-(_) =>
logger.info(s"Successfully updated cancellation reason for subscription $subscriptionName owned by $identityId")
NoContent
}
case None =>
Future.successful(BadRequest(Json.toJson(badRequest("Malformed request. Expected a valid reason for cancellation."))))
}
}
}