All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.wix.pay.creditcard.PublicCreditCard.scala Maven / Gradle / Ivy

The newest version!
/*      __ __ _____  __                                              *\
**     / // // /_/ |/ /          Wix                                 **
**    / // // / /|   /           (c) 2006-2015, Wix LTD.             **
**   / // // / //   |            http://www.wix.com/                 **
**   \__/|__/_//_/| |                                                **
\*                |/                                                 */
package com.wix.pay.creditcard


import com.wix.pay.creditcard.networks.Networks


/** Represents a credit card, which can be shown Public.
  * As such, several details are removed (in comparison to the [[CreditCard]]), such as the full
  * number, cvv, etc.
  *
  * @author Raz, Ohad
  */
case class PublicCreditCard private (lastDigits: String,
                                     expiration: YearMonth,
                                     network: Option[String],
                                     additionalFields: Option[PublicCreditCardOptionalFields])
    extends Serializable with CommonPublicCreditCardFields {

  override def holderId: Option[String] = additionalFields flatMap (_.holderId)
  override def billingAddress: Option[String] = additionalFields flatMap (_.billingAddress)
  override def billingPostalCode: Option[String] = additionalFields flatMap (_.billingPostalCode)
  override def holderName: Option[String] = additionalFields flatMap (_.holderName)
  override def billingAddressDetailed: Option[AddressDetailed] = additionalFields flatMap(_.billingAddressDetailed)

}


/** The companion object of the [[PublicCreditCard]] case class, introduces means to create a
  * public credit card based on a given [[CreditCard]].
  *
  * @author Raz, Ohad
  */
object PublicCreditCard {

  def apply(number: String,
            expiration: YearMonth,
            additionalFields: Option[PublicCreditCardOptionalFields] = None) = {
    new PublicCreditCard(
      lastDigits = number.takeRight(4),
      expiration = expiration,
      network = Networks(number),
      additionalFields = additionalFields)
  }

  def apply(creditCard: CreditCard): PublicCreditCard = {
    new PublicCreditCard(
      lastDigits = creditCard.number.takeRight(4),
      expiration = creditCard.expiration,
      network = Networks(creditCard.number),
      additionalFields = creditCard.additionalFields flatMap toAdditionalCreditCardFields)
  }
  

  def toAdditionalCreditCardFields(additionalFields: CreditCardOptionalFields): Option[PublicCreditCardOptionalFields] = {
    additionalFields.publicFields map (fields =>
      PublicCreditCardOptionalFields(
        holderId = fields.holderId,
        holderName = fields.holderName,
        billingAddress = fields.billingAddress,
        billingPostalCode = fields.billingPostalCode))
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy