Skip to content

Commit 581ed75

Browse files
authored
Merge pull request #180 from GTable/refactor/#178-isBookmark
refactor(Bookmark): 주점 전체 조회 isBookmark 필드 추가
2 parents 3a27095 + 9e2f03e commit 581ed75

8 files changed

Lines changed: 54 additions & 44 deletions

File tree

nowait-app-user-api/src/main/java/com/nowait/applicationuser/bookmark/service/BookmarkService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import org.springframework.transaction.annotation.Transactional;
1010

1111
import com.nowait.applicationuser.bookmark.dto.BookmarkCreateResponse;
12-
import com.nowait.applicationuser.store.dto.StorePageReadDto;
12+
import com.nowait.applicationuser.store.dto.StorePageReadResponse;
1313
import com.nowait.applicationuser.store.service.StoreService;
1414
import com.nowait.domaincorerdb.store.entity.Store;
1515
import com.nowait.domaincorerdb.store.repository.StoreRepository;
@@ -52,7 +52,7 @@ public BookmarkCreateResponse createBookmark(Long storeId, CustomOAuth2User cust
5252
}
5353

5454
@Transactional(readOnly = true)
55-
public List<StorePageReadDto> getBookmarks(CustomOAuth2User customOAuth2User) {
55+
public List<StorePageReadResponse> getBookmarks(CustomOAuth2User customOAuth2User) {
5656
User user = userRepository.findById(customOAuth2User.getUserId())
5757
.orElseThrow(UserNotFoundException::new);
5858

nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/controller/StoreController.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import org.springframework.web.bind.annotation.RequestParam;
1111
import org.springframework.web.bind.annotation.RestController;
1212

13-
import com.nowait.applicationuser.store.dto.StoreWaitingInfo;
1413
import com.nowait.applicationuser.store.service.StoreService;
1514
import com.nowait.common.api.ApiUtils;
1615
import com.nowait.domainuserrdb.oauth.dto.CustomOAuth2User;
@@ -37,12 +36,12 @@ public class StoreController {
3736
description = "모든 주점을 페이지네이션으로 조회합니다."
3837
)
3938
@ApiResponse(responseCode = "200", description = "모든 주점 페이지네이션 조회 성공")
40-
public ResponseEntity<?> getAllStoresByPageAndDeparments(Pageable pageable) {
39+
public ResponseEntity<?> getAllStoresByPageAndDeparments(Pageable pageable, @AuthenticationPrincipal CustomOAuth2User customOAuth2User) {
4140
return ResponseEntity
4241
.ok()
4342
.body(
4443
ApiUtils.success(
45-
storeService.getAllStoresByPageAndDeparments(pageable)
44+
storeService.getAllStoresByPageAndDeparments(pageable, customOAuth2User)
4645
)
4746
);
4847
}

nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StoreDepartmentReadResponse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111
@Builder
1212
public class StoreDepartmentReadResponse {
1313

14-
private List<StorePageReadResponse> storePageReadDtos;
14+
private List<StorePageReadResponse> storePageReadResponses;
1515
private boolean hasNext;
1616

1717
public static StoreDepartmentReadResponse of(List<StorePageReadResponse> storePageReadResponses, boolean hasNext) {
1818
return StoreDepartmentReadResponse.builder()
19-
.storePageReadDtos(storePageReadResponses)
19+
.storePageReadResponses(storePageReadResponses)
2020
.hasNext(hasNext)
2121
.build();
2222
}

nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StorePageReadResponse.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
@Builder
1616
public class StorePageReadResponse {
1717
private Long storeId;
18+
private Boolean isBookmark;
1819
private Long waitingCount;
1920
private Long departmentId;
2021
private String departmentName;
@@ -29,7 +30,7 @@ public class StorePageReadResponse {
2930
private Boolean deleted;
3031
private LocalDateTime createdAt;
3132

32-
public static StorePageReadResponse fromEntity(Store store, List<StoreImageUploadResponse> allImages, String departmentName, Long waitingCount) {
33+
public static StorePageReadResponse fromEntity(Store store, List<StoreImageUploadResponse> allImages, String departmentName, Long waitingCount, Boolean isBookmark) {
3334

3435
StoreImageUploadResponse profile = allImages.stream()
3536
.filter(image -> image.getImageType() == ImageType.PROFILE)
@@ -42,6 +43,7 @@ public static StorePageReadResponse fromEntity(Store store, List<StoreImageUploa
4243

4344
return StorePageReadResponse.builder()
4445
.storeId(store.getStoreId())
46+
.isBookmark(isBookmark)
4547
.waitingCount(waitingCount)
4648
.departmentId(store.getDepartmentId())
4749
.departmentName(departmentName)

nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StorePageReadDto.java renamed to nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StoreSearchResponse.java

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,47 +13,33 @@
1313
@Getter
1414
@AllArgsConstructor
1515
@Builder
16-
public class StorePageReadDto {
16+
public class StoreSearchResponse {
1717
private Long storeId;
18-
private Boolean isBookmark;
1918
private Long waitingCount;
2019
private Long departmentId;
2120
private String departmentName;
2221
private String name;
23-
private String location;
24-
private String description;
25-
private String notice;
2622
private String openTime;
2723
private StoreImageUploadResponse profileImage;
28-
private List<StoreImageUploadResponse> bannerImages;
2924
private Boolean isActive;
3025
private Boolean deleted;
3126
private LocalDateTime createdAt;
3227

33-
public static StorePageReadDto fromEntity(Store store, List<StoreImageUploadResponse> allImages, String departmentName, Long waitingCount, Boolean isBookmark) {
28+
public static StoreSearchResponse fromEntity(Store store, List<StoreImageUploadResponse> profileImage, String departmentName, Long waitingCount) {
3429

35-
StoreImageUploadResponse profile = allImages.stream()
30+
StoreImageUploadResponse profile = profileImage.stream()
3631
.filter(image -> image.getImageType() == ImageType.PROFILE)
3732
.findFirst()
3833
.orElse(null);
3934

40-
List<StoreImageUploadResponse> banners = allImages.stream()
41-
.filter(image -> image.getImageType() == ImageType.BANNER)
42-
.toList();
43-
44-
return StorePageReadDto.builder()
35+
return StoreSearchResponse.builder()
4536
.storeId(store.getStoreId())
46-
.isBookmark(isBookmark)
4737
.waitingCount(waitingCount)
4838
.departmentId(store.getDepartmentId())
4939
.departmentName(departmentName)
5040
.name(store.getName())
51-
.location(store.getLocation())
52-
.description(store.getDescription())
53-
.notice(store.getNotice())
5441
.openTime(store.getOpenTime())
5542
.profileImage(profile)
56-
.bannerImages(banners)
5743
.isActive(store.getIsActive())
5844
.deleted(store.getDeleted())
5945
.createdAt(store.getCreatedAt())

nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/service/StoreService.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,21 @@
77

88
import com.nowait.applicationuser.store.dto.StoreDepartmentReadResponse;
99
import com.nowait.applicationuser.store.dto.StoreDetailReadResponse;
10-
import com.nowait.applicationuser.store.dto.StorePageReadDto;
1110
import com.nowait.applicationuser.store.dto.StorePageReadResponse;
11+
import com.nowait.applicationuser.store.dto.StoreSearchResponse;
1212
import com.nowait.applicationuser.store.dto.StoreWaitingInfo;
13+
import com.nowait.domaincorerdb.user.entity.MemberDetails;
1314
import com.nowait.domainuserrdb.oauth.dto.CustomOAuth2User;
1415

1516
public interface StoreService {
1617

17-
StoreDepartmentReadResponse getAllStoresByPageAndDeparments(Pageable pageable);
18+
StoreDepartmentReadResponse getAllStoresByPageAndDeparments(Pageable pageable, CustomOAuth2User customOAuth2User);
1819

1920
StoreDetailReadResponse getStoreByStoreId(Long storeId, CustomOAuth2User customOAuth2User);
2021

21-
List<StorePageReadResponse> searchByKeywordNative(String name);
22+
List<StoreSearchResponse> searchByKeywordNative(String name);
2223

2324
List<StoreWaitingInfo> getStoresByWaitingCount(boolean desc);
2425

25-
List<StorePageReadDto> getAllStoresByPageAndDeparments(List<Long> storeIds, Set<Long> bookmarkedSet);
26+
List<StorePageReadResponse> getAllStoresByPageAndDeparments(List<Long> storeIds, Set<Long> bookmarkedSet);
2627
}

nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/service/StoreServiceImpl.java

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.nio.charset.StandardCharsets;
44
import java.util.ArrayList;
55
import java.util.Comparator;
6+
import java.util.HashSet;
67
import java.util.List;
78
import java.util.Map;
89
import java.util.Set;
@@ -24,8 +25,8 @@
2425
import com.nowait.applicationuser.store.dto.StoreDepartmentReadResponse;
2526
import com.nowait.applicationuser.store.dto.StoreDetailReadResponse;
2627
import com.nowait.applicationuser.store.dto.StoreImageUploadResponse;
27-
import com.nowait.applicationuser.store.dto.StorePageReadDto;
2828
import com.nowait.applicationuser.store.dto.StorePageReadResponse;
29+
import com.nowait.applicationuser.store.dto.StoreSearchResponse;
2930
import com.nowait.applicationuser.store.dto.StoreWaitingInfo;
3031
import com.nowait.domaincorerdb.department.entity.Department;
3132
import com.nowait.domaincorerdb.department.repository.DepartmentRepository;
@@ -40,6 +41,7 @@
4041
import com.nowait.domaincorerdb.user.exception.UserNotFoundException;
4142
import com.nowait.domaincorerdb.user.repository.UserRepository;
4243
import com.nowait.domaincoreredis.common.util.RedisKeyUtils;
44+
import com.nowait.domainuserrdb.bookmark.entity.Bookmark;
4345
import com.nowait.domainuserrdb.bookmark.repository.BookmarkRepository;
4446
import 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

nowait-domain/domain-user-rdb/src/main/java/com/nowait/domainuserrdb/bookmark/repository/BookmarkRepository.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.nowait.domainuserrdb.bookmark.repository;
22

3+
import java.awt.print.Book;
34
import java.util.Collection;
5+
import java.util.List;
46

57
import org.springframework.data.jpa.repository.JpaRepository;
68
import org.springframework.stereotype.Repository;
@@ -14,4 +16,6 @@ public interface BookmarkRepository extends JpaRepository<Bookmark,Long> {
1416
boolean existsByUserAndStore(User user, Store store);
1517

1618
Collection<Bookmark> findAllByUser(User user);
19+
20+
List<Bookmark> findStoreIdByUser(User user);
1721
}

0 commit comments

Comments
 (0)