def apply: GetSfAddressOverride =()

in handlers/sf-contact-merge/src/main/scala/com/gu/sf_contact_merge/getsfcontacts/GetSfAddressOverride.scala [15:34]


  def apply: GetSfAddressOverride = (
    sfAddresses: SFContactsForMerge[ClientFailableOp[SFMaybeAddress]]
  ) => {
    // get the address for the winning contact, if that is not set then iterate through the losing ones to find a good one
    for {
      addressInWinner <- sfAddresses.winner
      winning <- addressInWinner match {
        case UsableContactAddress(_) => ClientSuccess(DontOverrideAddress) // have a fine address already
        case UnusableContactAddress =>
          val maybeSuitableAddress = sfAddresses.others.collectFirst {
            case fail: ClientFailure => fail // give up, error
            case ClientSuccess(UsableContactAddress(address)) =>
              ClientSuccess(OverrideAddressWith(address)) // found a decent address
          }
          maybeSuitableAddress.getOrElse(
            ClientSuccess(DontOverrideAddress),
          ) // we're not going to lose any decent address
      }
    } yield winning
  }