UCHouseholdRepository.java

package uk.gov.dhsc.htbhf.dwp.repository;

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;
import uk.gov.dhsc.htbhf.dwp.entity.uc.UCHousehold;

import java.util.Optional;
import java.util.UUID;
import java.util.stream.Stream;

/**
 * JPA repository for Universal Credit households (members of the household are persisted via the household).
 */
public interface UCHouseholdRepository extends CrudRepository<UCHousehold, UUID> {

    /**
     * Return all households containing an adult with the given nino.
     *
     * @param nino The nino to check against
     * @return A stream containing all households found
     */
    @Query("SELECT household FROM UCHousehold household INNER JOIN FETCH household.adults adult "
            + "WHERE adult.nino = :nino")
    Stream<UCHousehold> findAllHouseholdsByAdultWithNino(@Param("nino") String nino);

    /**
     * Finds a household containing an adult with a matching nino. The household with the highest fileImportNumber
     * (most recent version) is the one returned.
     *
     * @param nino The nino to check against
     * @return An Optional containing a household if found
     */
    @Transactional(readOnly = true)
    default Optional<UCHousehold> findHouseholdByAdultWithNino(String nino) {
        Stream<UCHousehold> households = findAllHouseholdsByAdultWithNino(nino);
        return households.findFirst();
    }
}