in membership-attribute-service/app/controllers/ContactController.scala [27:58]
def updateDeliveryAddress(contactId: String): Action[AnyContent] =
AuthorizeForRecentLogin(Return401IfNotSignedInRecently, requiredScopes = List(updateSelf)).async { request =>
import request.logPrefix
metrics.measureDuration("PUT /user-attributes/me/delivery-address/:contactId") {
logger.info(s"Updating delivery address for contact $contactId")
isContactOwnedByRequester(request, contactId) flatMap { valid =>
if (valid) {
val submitted = Exception.allCatch.either {
request.body.asJson map (_.as[DeliveryAddress])
}
submitted match {
case Left(parsingFailure) => Future.successful(BadRequest(parsingFailure.getMessage))
case Right(None) => Future.successful(BadRequest(s"Not json: ${request.body}"))
case Right(Some(address)) =>
val contactRepository = request.touchpoint.contactRepository
update(contactRepository, contactId, address) map { _ =>
NoContent
} recover { case updateFailure =>
BadGateway(updateFailure.getMessage)
}
}
} else
Future.successful(
BadRequest(
s"Contact $contactId not related to current user ${request.redirectAdvice.userId}",
),
)
}
}
}