HouseholdVerifier.java

package uk.gov.dhsc.htbhf.hmrc.service;

import org.flywaydb.core.internal.util.StringUtils;
import org.springframework.stereotype.Service;
import uk.gov.dhsc.htbhf.hmrc.entity.Adult;
import uk.gov.dhsc.htbhf.hmrc.entity.Household;
import uk.gov.dhsc.htbhf.hmrc.model.HMRCPersonDTO;

@Service
public class HouseholdVerifier {

    public Boolean detailsMatch(Household household, HMRCPersonDTO person) {
        return household.getAdults().stream()
                .anyMatch(adult -> adultMatchesPerson(adult, person));
    }

    private boolean adultMatchesPerson(Adult adult, HMRCPersonDTO person) {
        return areEqual(adult.getSurname(), person.getSurname())
                && firstSixCharacterMatch(person.getAddress().getAddressLine1(), adult.getAddressLine1())
                && areEqualIgnoringWhitespace(adult.getPostcode(), person.getAddress().getPostcode());
    }

    private boolean firstSixCharacterMatch(String s1, String s2) {
        return areEqual(StringUtils.left(s1, 6), StringUtils.left(s2, 6));
    }

    private Boolean areEqualIgnoringWhitespace(String s1, String s2) {
        return areEqual(s1.replaceAll("\\s+", ""), s2.replaceAll("\\s+", ""));
    }

    private Boolean areEqual(String s1, String s2) {
        return s1.trim().equalsIgnoreCase(s2.trim());
    }
}