diff --git a/src/main/java/com/onebyone/kindergarten/domain/address/repository/SubRegionRepository.java b/src/main/java/com/onebyone/kindergarten/domain/address/repository/SubRegionRepository.java index b2a0c70..0ffffd1 100644 --- a/src/main/java/com/onebyone/kindergarten/domain/address/repository/SubRegionRepository.java +++ b/src/main/java/com/onebyone/kindergarten/domain/address/repository/SubRegionRepository.java @@ -1,10 +1,13 @@ package com.onebyone.kindergarten.domain.address.repository; import com.onebyone.kindergarten.domain.address.entity.SubRegion; +import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface SubRegionRepository extends JpaRepository { SubRegion findBySubRegionId(Long subRegionId); + + List findAllByParent(SubRegion subRegion); } diff --git a/src/main/java/com/onebyone/kindergarten/domain/kindergatens/repository/KindergartenRepository.java b/src/main/java/com/onebyone/kindergarten/domain/kindergatens/repository/KindergartenRepository.java index 9b08e45..e0abff5 100644 --- a/src/main/java/com/onebyone/kindergarten/domain/kindergatens/repository/KindergartenRepository.java +++ b/src/main/java/com/onebyone/kindergarten/domain/kindergatens/repository/KindergartenRepository.java @@ -76,4 +76,12 @@ List findNearbyKindergartenEntities( + "AND k.subRegionId = :subRegionId") List findAllByRegionIdAndSubRegionIdWithFetch( @Param("regionId") Long regionId, @Param("subRegionId") Long subRegionId); + + @Query( + "SELECT k FROM Kindergarten k " + + "LEFT JOIN FETCH k.kindergartenWorkReviewAggregate w " + + "LEFT JOIN FETCH k.kindergartenInternshipReviewAggregate i " + + "WHERE k.regionId = :regionId " + + "AND k.subRegionId in :ids") + List findAllByRegionIdAndSubRegionIdInWithFetch(Long regionId, List ids); } diff --git a/src/main/java/com/onebyone/kindergarten/domain/kindergatens/service/KindergartenService.java b/src/main/java/com/onebyone/kindergarten/domain/kindergatens/service/KindergartenService.java index 5562607..8ee357e 100644 --- a/src/main/java/com/onebyone/kindergarten/domain/kindergatens/service/KindergartenService.java +++ b/src/main/java/com/onebyone/kindergarten/domain/kindergatens/service/KindergartenService.java @@ -151,18 +151,32 @@ public List getKindergartenByRegion(Long regionId, Long throw new BusinessException(ErrorCodes.REGION_NOT_FOUND_EXCEPTION); } - SubRegion subRegion = subRegionRepository.findBySubRegionId(subRegionId); - - if (subRegion == null) { + if (subRegionId == null) { return kindergartenRepository.findAllByRegionIdWithFetch(regionId).stream() .map(KindergartenResponseDTO::from) .toList(); } + SubRegion subRegion = subRegionRepository.findBySubRegionId(subRegionId); + + if (subRegion == null) { + throw new BusinessException(ErrorCodes.SUB_REGION_NOT_FOUND_EXCEPTION); + } if (!regionId.equals(subRegion.getRegionId())) { throw new BusinessException(ErrorCodes.REGION_NOT_MATCHED_WITH_SUB_REGION); } + List allByParentId = subRegionRepository.findAllByParent(subRegion); + + if (!allByParentId.isEmpty()) { + List ids = allByParentId.stream().map(SubRegion::getSubRegionId).toList(); + return kindergartenRepository + .findAllByRegionIdAndSubRegionIdInWithFetch(regionId, ids) + .stream() + .map(KindergartenResponseDTO::from) + .toList(); + } + return kindergartenRepository .findAllByRegionIdAndSubRegionIdWithFetch(regionId, subRegionId) .stream()