diff --git a/src/main/java/com/sumte/guesthouse/controller/GuesthouseController.java b/src/main/java/com/sumte/guesthouse/controller/GuesthouseController.java index 62c3f82..f6d438a 100644 --- a/src/main/java/com/sumte/guesthouse/controller/GuesthouseController.java +++ b/src/main/java/com/sumte/guesthouse/controller/GuesthouseController.java @@ -59,11 +59,12 @@ public class GuesthouseController { name = "Guesthouse Register Example", value = """ { - "name": "도심 속 게스트하우스", - "description": "시장 도보 10분, 해수욕장 15분", - "basePrice": 35000, - "optionService": ["조식포함"], - "targetAudience": ["남성전용"] + "name": "필터링 될 게스트하우스", + "addressRegion": "제주특별자치도", + "addressDetail": "어쩌구길 12", + "information": "시장 도보 10분, 해수욕장 도보 15분 거리", + "optionServices": ["조식포함", "여성전용"], + "targetAudience": ["애견동반"] } """ ) diff --git a/src/main/java/com/sumte/guesthouse/repository/GuesthouseRepositoryImpl.java b/src/main/java/com/sumte/guesthouse/repository/GuesthouseRepositoryImpl.java index 54c7d77..ea034c4 100644 --- a/src/main/java/com/sumte/guesthouse/repository/GuesthouseRepositoryImpl.java +++ b/src/main/java/com/sumte/guesthouse/repository/GuesthouseRepositoryImpl.java @@ -157,21 +157,32 @@ public Page searchFiltered(GuesthouseSearchRequestDTO dto, } if (dto.getOptionService() != null && !dto.getOptionService().isEmpty()) { - condition.and(guesthouse.id.in( - JPAExpressions.select(guesthouseOptionServices.guesthouse.id) - .from(guesthouseOptionServices) - .join(guesthouseOptionServices.optionServices, optionService) - .where(optionService.name.in(dto.getOptionService())) - )); + for (String svc : dto.getOptionService()) { + condition.and( + guesthouse.id.in( + JPAExpressions + .select(guesthouseOptionServices.guesthouse.id) + .from(guesthouseOptionServices) + .join(guesthouseOptionServices.optionServices, optionService) + .where(optionService.name.eq(svc)) + ) + ); + } } + // targetAudience: 각 값이 모두 포함된 게스트하우스만 (AND) if (dto.getTargetAudience() != null && !dto.getTargetAudience().isEmpty()) { - condition.and(guesthouse.id.in( - JPAExpressions.select(guesthouseTargetAudience.guesthouse.id) - .from(guesthouseTargetAudience) - .join(guesthouseTargetAudience.targetAudience, targetAudience) - .where(targetAudience.name.in(dto.getTargetAudience())) - )); + for (String aud : dto.getTargetAudience()) { + condition.and( + guesthouse.id.in( + JPAExpressions + .select(guesthouseTargetAudience.guesthouse.id) + .from(guesthouseTargetAudience) + .join(guesthouseTargetAudience.targetAudience, targetAudience) + .where(targetAudience.name.eq(aud)) + ) + ); + } } NumberExpression avgScoreExpr = Expressions.numberTemplate(