EligibilityService.java
package uk.gov.dhsc.htbhf.hmrc.service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import uk.gov.dhsc.htbhf.hmrc.entity.Household;
import uk.gov.dhsc.htbhf.hmrc.factory.EligibilityResponseFactory;
import uk.gov.dhsc.htbhf.hmrc.model.EligibilityResponse;
import uk.gov.dhsc.htbhf.hmrc.model.HMRCEligibilityRequest;
import uk.gov.dhsc.htbhf.hmrc.repository.HouseholdRepository;
import java.util.Optional;
import static uk.gov.dhsc.htbhf.eligibility.model.EligibilityStatus.ELIGIBLE;
import static uk.gov.dhsc.htbhf.eligibility.model.EligibilityStatus.NO_MATCH;
@Service
@Slf4j
public class EligibilityService {
private final HouseholdRepository repository;
private final HouseholdVerifier householdVerifier;
private final EligibilityResponseFactory eligibilityResponseFactory;
public EligibilityService(HouseholdRepository repository,
HouseholdVerifier householdVerifier,
EligibilityResponseFactory eligibilityResponseFactory) {
this.repository = repository;
this.householdVerifier = householdVerifier;
this.eligibilityResponseFactory = eligibilityResponseFactory;
}
public EligibilityResponse checkEligibility(HMRCEligibilityRequest eligibilityRequest) {
Optional<Household> household = repository.findHouseholdByAdultWithNino(eligibilityRequest.getPerson().getNino());
if (household.isPresent()) {
log.debug("Matched CTC household: {}", household.get().getId());
return getEligibilityResponse(eligibilityRequest, household.get());
}
log.debug("No match found in db - returning NO_MATCH");
return EligibilityResponse.builder().eligibilityStatus(NO_MATCH).build();
}
private EligibilityResponse getEligibilityResponse(HMRCEligibilityRequest eligibilityRequest, Household household) {
return householdVerifier.detailsMatch(household, eligibilityRequest.getPerson())
? eligibilityResponseFactory.createEligibilityResponse(household, ELIGIBLE)
: EligibilityResponse.builder().eligibilityStatus(NO_MATCH).build();
}
}