44import boombimapi .domain .congestion .entity .OfficialCongestion ;
55import boombimapi .domain .congestion .repository .MemberCongestionRepository ;
66import boombimapi .domain .congestion .repository .OfficialCongestionRepository ;
7+ import boombimapi .domain .favorite .entity .Favorite ;
8+ import boombimapi .domain .favorite .repository .FavoriteRepository ;
79import boombimapi .domain .member .domain .entity .Member ;
810import boombimapi .domain .member .domain .repository .MemberRepository ;
911import boombimapi .domain .place .entity .MemberPlace ;
1012import boombimapi .domain .place .entity .OfficialPlace ;
13+ import boombimapi .domain .place .entity .PlaceType ;
1114import boombimapi .domain .place .repository .MemberPlaceRepository ;
1215import boombimapi .domain .place .repository .OfficialPlaceRepository ;
1316import boombimapi .domain .search .application .SearchService ;
@@ -49,6 +52,7 @@ public class SearchServiceImpl implements SearchService {
4952 // 혼잡도
5053 private final OfficialCongestionRepository officialCongestionRepository ;
5154 private final MemberCongestionRepository memberCongestionRepository ;
55+ private final FavoriteRepository favoriteRepository ;
5256
5357 @ Override
5458 public List <SearchHistoryRes > getSearchHistory (String userId ) {
@@ -99,8 +103,11 @@ public List<SearchRelatedRes> getSearchRelated(String posName) {
99103
100104 @ Override
101105 public List <SearchRes > getSearch (String posName , String userId ) {
106+ Member member = memberRepository .findById (userId )
107+ .orElseThrow (() -> new BoombimException (ErrorCode .USER_NOT_EXIST ));
108+
102109 if (!Objects .equals (posName , "" )) {
103- saveSearchWord (posName , userId ); // 공백은 저장 X
110+ saveSearchWord (posName , member ); // 공백은 저장 X
104111 }
105112
106113
@@ -113,7 +120,7 @@ public List<SearchRes> getSearch(String posName, String userId) {
113120 officialPlaceRepository .findEntitiesByNameContainingIgnoreCase (posName , limit10 );
114121
115122
116- return sortedCongestion (memberPlaceEntities , officialEntities );
123+ return sortedCongestion (memberPlaceEntities , officialEntities , member );
117124
118125 }
119126
@@ -142,9 +149,7 @@ public void deleteAll(String userId) {
142149 }
143150
144151
145- private void saveSearchWord (String posName , String userId ) {
146- Member member = memberRepository .findById (userId )
147- .orElseThrow (() -> new BoombimException (ErrorCode .USER_NOT_EXIST ));
152+ private void saveSearchWord (String posName , Member member ) {
148153
149154 Search findSearch = searchRepository .findBySearchWord (posName ).orElse (null );
150155 if (findSearch == null ) {
@@ -154,29 +159,50 @@ private void saveSearchWord(String posName, String userId) {
154159 }
155160
156161 // 장소마다 혼잡도 조회해서 정보 넘겨줘야됨
157- private List <SearchRes > sortedCongestion (List <MemberPlace > memberPlaceEntities , List <OfficialPlace > officialEntities ) {
162+ private List <SearchRes > sortedCongestion (List <MemberPlace > memberPlaceEntities , List <OfficialPlace > officialEntities , Member member ) {
163+ // 서버에 있는 장소들이 매개변수로 넘어옴
164+
158165 List <SearchRes > result = new ArrayList <>();
159166
167+
160168 for (MemberPlace memberPlace : memberPlaceEntities ) {
161169
170+ boolean favoriteFlag = false ;
171+
172+ // 해당 장소 즐겨찾기 여부
173+ Favorite favorite = favoriteRepository .findByMemberAndPlaceIdAndPlaceType (member , memberPlace .getId (), PlaceType .MEMBER_PLACE ).orElse (null );
174+ if (favorite != null ) favoriteFlag = true ;
175+
176+ // 혼잡도 정보 때문에 즉 붐빔 키워드랑 최신 반영 날짜 때문에
162177 MemberCongestion latestMember =
163178 memberCongestionRepository .findTop1ByMemberPlaceIdOrderByCreatedAtDesc (memberPlace .getId ()).orElse (null );
164179
165180 if (latestMember != null ) {
166-
167-
168181 result .add (SearchRes .of (memberPlace .getId (), memberPlace .getName (), latestMember .getCreatedAt (),
169- latestMember .getCongestionLevel ().getName (), memberPlace .getAddress (), memberPlace .getImageUrl (), "사용자" ));
182+ latestMember .getCongestionLevel ().getName (), memberPlace .getAddress (), memberPlace .getImageUrl (), PlaceType . MEMBER_PLACE , favoriteFlag ));
170183 }
171184 }
172185
173186
174187 for (OfficialPlace official : officialEntities ) {
188+
189+
190+ boolean favoriteFlag = false ;
191+
192+ // 해당 장소 즐겨찾기 여부
193+ Favorite favorite = favoriteRepository .findByMemberAndPlaceIdAndPlaceType (member , official .getId (), PlaceType .OFFICIAL_PLACE ).orElse (null );
194+ if (favorite != null ) favoriteFlag = true ;
195+
175196 OfficialCongestion latestOfficial =
176197 officialCongestionRepository .findTopByOfficialPlaceIdOrderByObservedAtDesc (official .getId ()).orElse (null );
198+
199+ // 혼잡도 정보 때문에 즉 붐빔 키워드랑 최신 반영 날짜 때문에 하지만 사용자가 올린거랑 다르게 null 도 존재함 애초에 공식 장소라
177200 if (latestOfficial != null ) {
178201 result .add (SearchRes .of (official .getId (), official .getName (), latestOfficial .getObservedAt (),
179- latestOfficial .getCongestionLevel ().getName (), "" , official .getImageUrl (), "공식" ));
202+ latestOfficial .getCongestionLevel ().getName (), null , official .getImageUrl (), PlaceType .OFFICIAL_PLACE , favoriteFlag ));
203+ } else {
204+ result .add (SearchRes .of (official .getId (), official .getName (), null ,
205+ null , null , official .getImageUrl (), PlaceType .OFFICIAL_PLACE , favoriteFlag ));
180206 }
181207 }
182208
0 commit comments