membership-attribute-service/app/json/PaymentCardUpdateResultWriters.scala (26 lines of code) (raw):
package json
import com.gu.memsub.{CardUpdateFailure, CardUpdateSuccess, PaymentCard}
import play.api.libs.json._
import play.api.libs.functional.syntax._
object PaymentCardUpdateResultWriters {
implicit val paymentCardWrites: Writes[PaymentCard] = Writes[PaymentCard] { paymentCard =>
Json.obj("type" -> paymentCard.cardType.getOrElse[String]("unknown").replace(" ", "")) ++
paymentCard.paymentCardDetails
.map(details =>
Json.obj(
"last4" -> details.lastFourDigits,
"expiryMonth" -> details.expiryMonth,
"expiryYear" -> details.expiryYear,
),
)
.getOrElse(Json.obj("last4" -> "••••")) // effectively impossible to happen as this is used in a card update context
}
implicit val cardUpdateSuccessWrites = Writes[CardUpdateSuccess] { cus =>
paymentCardWrites.writes(cus.newPaymentCard)
}
implicit val cardUpdateFailureWrites: Writes[CardUpdateFailure] = (
(JsPath \ "type").write[String] and
(JsPath \ "message").write[String] and
(JsPath \ "code").write[String]
)(unlift(CardUpdateFailure.unapply))
}