33import java .nio .charset .StandardCharsets ;
44import java .util .ArrayList ;
55import java .util .Comparator ;
6+ import java .util .HashSet ;
67import java .util .List ;
78import java .util .Map ;
89import java .util .Set ;
2425import com .nowait .applicationuser .store .dto .StoreDepartmentReadResponse ;
2526import com .nowait .applicationuser .store .dto .StoreDetailReadResponse ;
2627import com .nowait .applicationuser .store .dto .StoreImageUploadResponse ;
27- import com .nowait .applicationuser .store .dto .StorePageReadDto ;
2828import com .nowait .applicationuser .store .dto .StorePageReadResponse ;
29+ import com .nowait .applicationuser .store .dto .StoreSearchResponse ;
2930import com .nowait .applicationuser .store .dto .StoreWaitingInfo ;
3031import com .nowait .domaincorerdb .department .entity .Department ;
3132import com .nowait .domaincorerdb .department .repository .DepartmentRepository ;
4041import com .nowait .domaincorerdb .user .exception .UserNotFoundException ;
4142import com .nowait .domaincorerdb .user .repository .UserRepository ;
4243import com .nowait .domaincoreredis .common .util .RedisKeyUtils ;
44+ import com .nowait .domainuserrdb .bookmark .entity .Bookmark ;
4345import com .nowait .domainuserrdb .bookmark .repository .BookmarkRepository ;
4446import com .nowait .domainuserrdb .oauth .dto .CustomOAuth2User ;
4547
@@ -59,7 +61,10 @@ public class StoreServiceImpl implements StoreService {
5961
6062 @ Override
6163 @ Transactional (readOnly = true )
62- public StoreDepartmentReadResponse getAllStoresByPageAndDeparments (Pageable pageable ) {
64+ public StoreDepartmentReadResponse getAllStoresByPageAndDeparments (Pageable pageable , CustomOAuth2User customOAuth2User ) {
65+
66+ User user = customOAuth2User .getUser ();
67+
6368 // 1) 페이징된 Store 스냅샷 조회
6469 Slice <Store > slice = storeRepository .findAllByDeletedFalseOrderByStoreIdAsc (pageable );
6570 List <Store > stores = slice .getContent ();
@@ -73,6 +78,14 @@ public StoreDepartmentReadResponse getAllStoresByPageAndDeparments(Pageable page
7378 .distinct ()
7479 .toList ();
7580
81+ // 2) 사용자 북마크된 storeId 집합 조회
82+ List <Long > storeBookmarkIds = bookmarkRepository .findAllByUser (user )
83+ .stream ()
84+ .map (Bookmark ::getStore )
85+ .map (Store ::getStoreId )
86+ .toList ();
87+ Set <Long > bookmarkedSet = new HashSet <>(storeIds );
88+
7689 // 2-1) Redis에서 각 Store의 웨이팅 사이즈 조회
7790 Map <Long , Long > waitingSizeMap = storeIds .stream ()
7891 .collect (Collectors .toMap (
@@ -105,16 +118,21 @@ public StoreDepartmentReadResponse getAllStoresByPageAndDeparments(Pageable page
105118 Department ::getName
106119 ));
107120
121+ List <Bookmark > allBookmarks = bookmarkRepository .findStoreIdByUser (user );
122+ Map <Long , Boolean > bookmarkMap = allBookmarks .stream ()
123+ .collect (Collectors .toMap (
124+ bookmark -> bookmark .getStore ().getStoreId (),
125+ b -> Boolean .TRUE
126+ ));
127+
108128 // 5) Dto 매핑
109129 List <StorePageReadResponse > content = stores .stream ()
110130 .map (store -> {
111- List <StoreImageUploadResponse > imgs = imageMap
112- .getOrDefault (store .getStoreId (), List .of ());
113- String departmentName = deptNameMap
114- .getOrDefault (store .getDepartmentId (), "Unknown Department" );
115- Long waitingCount =
116- waitingSizeMap .getOrDefault (store .getStoreId (), 0L );
117- return StorePageReadResponse .fromEntity (store , imgs , departmentName , waitingCount );
131+ List <StoreImageUploadResponse > imgs = imageMap .getOrDefault (store .getStoreId (), List .of ());
132+ String departmentName = deptNameMap .getOrDefault (store .getDepartmentId (), "Unknown Department" );
133+ Long waitingCount = waitingSizeMap .getOrDefault (store .getStoreId (), 0L );
134+ Boolean isBookmark = bookmarkMap .getOrDefault (store .getStoreId (), false );
135+ return StorePageReadResponse .fromEntity (store , imgs , departmentName , waitingCount , isBookmark );
118136 })
119137 .toList ();
120138
@@ -153,7 +171,7 @@ public StoreDetailReadResponse getStoreByStoreId(Long storeId, CustomOAuth2User
153171 }
154172
155173 @ Override
156- public List <StorePageReadResponse > searchByKeywordNative (String keyword ) {
174+ public List <StoreSearchResponse > searchByKeywordNative (String keyword ) {
157175 if (keyword == null || keyword .isBlank ()) {
158176 throw new StoreParamEmptyException ();
159177 }
@@ -210,7 +228,7 @@ public List<StorePageReadResponse> searchByKeywordNative(String keyword) {
210228 .getOrDefault (store .getDepartmentId (), "Unknown Department" );
211229 Long waitingCount =
212230 waitingSizeMap .getOrDefault (store .getStoreId (), 0L );
213- return StorePageReadResponse .fromEntity (store , imgs , departmentName , waitingCount );
231+ return StoreSearchResponse .fromEntity (store , imgs , departmentName , waitingCount );
214232 })
215233 .toList ();
216234 }
@@ -285,7 +303,7 @@ private RedisConnection getSafeConnection() {
285303
286304 @ Override
287305 @ Transactional (readOnly = true )
288- public List <StorePageReadDto > getAllStoresByPageAndDeparments (List <Long > storeIds , Set <Long > bookmarkedSet ) {
306+ public List <StorePageReadResponse > getAllStoresByPageAndDeparments (List <Long > storeIds , Set <Long > bookmarkedSet ) {
289307 // 1) 페이징된 Store 스냅샷 조회
290308 List <Store > stores = storeRepository .findAllByStoreIdInOrderByStoreIdAsc (storeIds );
291309
@@ -328,7 +346,7 @@ public List<StorePageReadDto> getAllStoresByPageAndDeparments(List<Long> storeId
328346 ));
329347
330348 // 5) Dto 매핑
331- List <StorePageReadDto > content = stores .stream ()
349+ List <StorePageReadResponse > content = stores .stream ()
332350 .map (store -> {
333351 List <StoreImageUploadResponse > imgs = imageMap
334352 .getOrDefault (store .getStoreId (), List .of ());
@@ -338,7 +356,7 @@ public List<StorePageReadDto> getAllStoresByPageAndDeparments(List<Long> storeId
338356 waitingSizeMap .getOrDefault (store .getStoreId (), 0L );
339357 boolean isBookmark = bookmarkedSet .contains (store .getStoreId ());
340358
341- return StorePageReadDto .fromEntity (store , imgs , departmentName , waitingCount , isBookmark );
359+ return StorePageReadResponse .fromEntity (store , imgs , departmentName , waitingCount , isBookmark );
342360 })
343361 .toList ();
344362
0 commit comments