Skip to content

Commit a94781b

Browse files
authored
Merge pull request #149 from DevKor-github/fix/search
fix: 통합 검색 오류 수정
2 parents e8d0183 + bd4201c commit a94781b

File tree

4 files changed

+44
-37
lines changed

4 files changed

+44
-37
lines changed

src/main/java/devkor/com/teamcback/domain/place/entity/PlaceType.java

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,35 +6,36 @@
66
@Getter
77
@RequiredArgsConstructor
88
public enum PlaceType {
9-
CLASSROOM("클래스룸"),
10-
TOILET("화장실"),
11-
MEN_TOILET("남자화장실"),
12-
WOMEN_TOILET("여자화장실"),
13-
MEN_HANDICAPPED_TOILET("남자장애인화장실"),
14-
WOMEN_HANDICAPPED_TOILET("여자장애인화장실"),
15-
VENDING_MACHINE("자판기"),
16-
WATER_PURIFIER("정수기"),
17-
PRINTER("프린터"),
18-
LOUNGE("라운지"),
19-
CAFE("카페"),
20-
SMOKING_BOOTH("흡연부스"),
21-
CONVENIENCE_STORE("편의점"),
22-
CAFETERIA("식당"),
23-
READING_ROOM("열람실"),
24-
STUDY_ROOM("스터디룸"),
25-
SLEEPING_ROOM("수면실"),
26-
SHOWER_ROOM("샤워실"),
27-
LOCKER("사물함"),
28-
BANK("은행"),
29-
TRASH_CAN("쓰레기통"),
30-
GYM("헬스장"),
31-
BICYCLE_RACK("자전거보관소"),
32-
BENCH("벤치"),
33-
SHUTTLE_BUS("셔틀버스정거장"),
34-
BOOK_RETURN_MACHINE("도서반납기"),
35-
TUMBLER_WASHER("텀블러세척기"),
36-
ONESTOP_AUTO_MACHINE("원스탑무인발급기"),
37-
KOYEON("고연전주점");
9+
CLASSROOM("클래스룸", new String[]{}),
10+
TOILET("화장실", new String[]{}),
11+
MEN_TOILET("남자화장실", new String[]{}),
12+
WOMEN_TOILET("여자화장실", new String[]{}),
13+
MEN_HANDICAPPED_TOILET("남자장애인화장실", new String[]{}),
14+
WOMEN_HANDICAPPED_TOILET("여자장애인화장실", new String[]{}),
15+
VENDING_MACHINE("자판기", new String[]{"벤딩머신"}),
16+
WATER_PURIFIER("정수기", new String[]{"물나오는"}),
17+
PRINTER("프린터", new String[]{"프린트기", "프린터기", "인쇄기"}),
18+
LOUNGE("라운지", new String[]{"공부하기좋은곳", "쉴곳", "쉬는", "휴식공간"}),
19+
CAFE("카페", new String[]{"커피"}),
20+
SMOKING_BOOTH("흡연부스", new String[]{"흡연구역", "담배"}),
21+
CONVENIENCE_STORE("편의점", new String[]{"컨비니언스스토어"}),
22+
CAFETERIA("식당", new String[]{"학식", "밥먹는곳"}),
23+
READING_ROOM("열람실", new String[]{"독서실"}),
24+
STUDY_ROOM("스터디룸", new String[]{"단체모임", "회의실"}),
25+
SLEEPING_ROOM("수면실", new String[]{"자기좋은곳", "자는곳"}),
26+
SHOWER_ROOM("샤워실", new String[]{"씻는데"}),
27+
LOCKER("사물함", new String[]{"락커"}),
28+
BANK("은행", new String[]{"ATM", "에이티엠기"}),
29+
TRASH_CAN("쓰레기통", new String[]{"휴지통"}),
30+
GYM("헬스장", new String[]{"휘트니스센터", "피트니스센터", "운동"}),
31+
BICYCLE_RACK("자전거보관소", new String[]{}),
32+
BENCH("벤치", new String[]{"의자"}),
33+
SHUTTLE_BUS("셔틀버스정거장", new String[]{"셔틀버스버정"}),
34+
BOOK_RETURN_MACHINE("도서반납기", new String[]{"책반납기계", "도서반납기계"}),
35+
TUMBLER_WASHER("텀블러세척기", new String[]{}),
36+
ONESTOP_AUTO_MACHINE("원스탑무인발급기", new String[]{"원스톱무인발급기", "증명서", "ONE-STOP", "ONESTOP"}),
37+
KOYEON("고연전주점", new String[]{});
3838

3939
private final String name;
40+
private final String[] nickname;
4041
}

src/main/java/devkor/com/teamcback/domain/place/repository/PlaceRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,5 @@ public interface PlaceRepository extends JpaRepository<Place, Long> {
2626

2727
Place findByBuildingAndFloorAndMaskIndex(Building building, double floor, Integer maskIndex);
2828

29-
List<Place> findAllByBuildingAndTypeInOrderByFloor(Building building, List<PlaceType> types);
29+
List<Place> findAllByBuildingAndTypeInAndAvailabilityOrderByFloor(Building building, List<PlaceType> types, boolean availability);
3030
}

src/main/java/devkor/com/teamcback/domain/search/dto/response/GlobalSearchRes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public boolean equals(Object o) {
4747
if (this == o) return true;
4848
if (o == null || getClass() != o.getClass()) return false;
4949
GlobalSearchRes that = (GlobalSearchRes) o;
50-
return name.equals(that.name);
50+
return name.equals(that.name) && locationType.equals(that.locationType);
5151
}
5252

5353
@Override

src/main/java/devkor/com/teamcback/domain/search/service/SearchService.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -511,16 +511,22 @@ private List<Place> getPlaces(String word, Building building) {
511511
// 초성으로만 구성된 경우
512512
if(hangeulUtils.isConsonantOnly(word)) placeNicknames.addAll(placeNicknameRepository.findByChosungContainingAndPlaceInOrderByNickname(hangeulUtils.extractChosung(word), places, limit));
513513

514+
// 중복을 제거하여 List에 저장
514515
resultPlaces.addAll(placeNicknames.stream()
515516
.map(PlaceNickname::getPlace)
516517
.distinct()
517518
.toList());
518519

519520
// 빌딩 + 편의시설명의 경우를 GlobalSearchRes로 추가하기 (Ex. 하나스퀘어 카페)
520-
// word가 편의시설명과 부분일치하는지 확인하기(outerTagTypes)
521+
// word가 편의시설명과 부분일치하는지 확인하기(outerTagTypes) && 빌딩에 해당 시설이 있는지 확인
521522
for (PlaceType type : outerTagTypes) {
522-
if(type.getName().contains(word)) {
523-
resultPlaces.add(new Place(type, building));
523+
if((type.getName().contains(word) || Arrays.stream(type.getNickname()).anyMatch(nickname -> nickname.contains(word)))) {
524+
List<Place> tempPlace = placeRepository.findAllByBuildingAndType(building, type);
525+
if(!tempPlace.isEmpty()) {
526+
resultPlaces.addAll(tempPlace);
527+
resultPlaces.add(new Place(type, building));
528+
}
529+
524530
}
525531
}
526532
}
@@ -529,25 +535,25 @@ else if(building == null) { // 빌딩 제한 없는 전체 검색
529535
// 초성으로만 구성된 경우
530536
if(hangeulUtils.isConsonantOnly(word)) placeNicknames.addAll( placeNicknameRepository.findAllByChosungContainingOrderByNickname(hangeulUtils.extractChosung(word), limit));
531537

538+
// 중복을 제거하여 List에 저장
532539
resultPlaces.addAll(placeNicknames.stream()
533540
.map(PlaceNickname::getPlace)
534541
.distinct()
535542
.toList());
536543

537544
// 자체가 편의시설명인 경우 : 야외 태그
538545
for (PlaceType type : outerTagTypes) {
539-
if(type.getName().contains(word)) {
546+
if(type.getName().contains(word) || Arrays.stream(type.getNickname()).anyMatch(nickname -> nickname.contains(word))) {
540547
resultPlaces.add(new Place(type, findBuilding(0L)));
541548
}
542549
}
543550
}
544-
// 중복을 제거하여 List에 저장
545551
return resultPlaces;
546552
}
547553

548554
// 특정 건물 및 타입 리스트에 속하는 편의시설 검색
549555
private List<Place> getFacilitiesByBuildingAndTypes(Building building, List<PlaceType> types) {
550-
return placeRepository.findAllByBuildingAndTypeInOrderByFloor(building, types);
556+
return placeRepository.findAllByBuildingAndTypeInAndAvailabilityOrderByFloor(building, types, true);
551557
}
552558

553559
// 특정 건물 및 타입에 속하는 편의시설 검색 (화장실 검색하는 경우 - 다른 화장실 모두 포함하도록)

0 commit comments

Comments
 (0)