Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import org.springframework.transaction.annotation.Transactional;

import com.nowait.applicationuser.bookmark.dto.BookmarkCreateResponse;
import com.nowait.applicationuser.store.dto.StorePageReadDto;
import com.nowait.applicationuser.store.dto.StorePageReadResponse;
import com.nowait.applicationuser.store.service.StoreService;
import com.nowait.domaincorerdb.store.entity.Store;
import com.nowait.domaincorerdb.store.repository.StoreRepository;
Expand Down Expand Up @@ -52,7 +52,7 @@ public BookmarkCreateResponse createBookmark(Long storeId, CustomOAuth2User cust
}

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.nowait.applicationuser.store.dto.StoreWaitingInfo;
import com.nowait.applicationuser.store.service.StoreService;
import com.nowait.common.api.ApiUtils;
import com.nowait.domainuserrdb.oauth.dto.CustomOAuth2User;
Expand All @@ -37,12 +36,12 @@ public class StoreController {
description = "모든 주점을 페이지네이션으로 조회합니다."
)
@ApiResponse(responseCode = "200", description = "모든 주점 페이지네이션 조회 성공")
public ResponseEntity<?> getAllStoresByPageAndDeparments(Pageable pageable) {
public ResponseEntity<?> getAllStoresByPageAndDeparments(Pageable pageable, @AuthenticationPrincipal CustomOAuth2User customOAuth2User) {
return ResponseEntity
.ok()
.body(
ApiUtils.success(
storeService.getAllStoresByPageAndDeparments(pageable)
storeService.getAllStoresByPageAndDeparments(pageable, customOAuth2User)
)
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@
@Builder
public class StoreDepartmentReadResponse {

private List<StorePageReadResponse> storePageReadDtos;
private List<StorePageReadResponse> storePageReadResponses;
private boolean hasNext;

public static StoreDepartmentReadResponse of(List<StorePageReadResponse> storePageReadResponses, boolean hasNext) {
return StoreDepartmentReadResponse.builder()
.storePageReadDtos(storePageReadResponses)
.storePageReadResponses(storePageReadResponses)
.hasNext(hasNext)
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
@Builder
public class StorePageReadResponse {
private Long storeId;
private Boolean isBookmark;
private Long waitingCount;
private Long departmentId;
private String departmentName;
Expand All @@ -29,7 +30,7 @@ public class StorePageReadResponse {
private Boolean deleted;
private LocalDateTime createdAt;

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

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

return StorePageReadResponse.builder()
.storeId(store.getStoreId())
.isBookmark(isBookmark)
.waitingCount(waitingCount)
.departmentId(store.getDepartmentId())
.departmentName(departmentName)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,47 +13,33 @@
@Getter
@AllArgsConstructor
@Builder
public class StorePageReadDto {
public class StoreSearchResponse {
private Long storeId;
private Boolean isBookmark;
private Long waitingCount;
private Long departmentId;
private String departmentName;
private String name;
private String location;
private String description;
private String notice;
private String openTime;
private StoreImageUploadResponse profileImage;
private List<StoreImageUploadResponse> bannerImages;
private Boolean isActive;
private Boolean deleted;
private LocalDateTime createdAt;

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

StoreImageUploadResponse profile = allImages.stream()
StoreImageUploadResponse profile = profileImage.stream()
.filter(image -> image.getImageType() == ImageType.PROFILE)
.findFirst()
.orElse(null);

List<StoreImageUploadResponse> banners = allImages.stream()
.filter(image -> image.getImageType() == ImageType.BANNER)
.toList();

return StorePageReadDto.builder()
return StoreSearchResponse.builder()
.storeId(store.getStoreId())
.isBookmark(isBookmark)
.waitingCount(waitingCount)
.departmentId(store.getDepartmentId())
.departmentName(departmentName)
.name(store.getName())
.location(store.getLocation())
.description(store.getDescription())
.notice(store.getNotice())
.openTime(store.getOpenTime())
.profileImage(profile)
.bannerImages(banners)
.isActive(store.getIsActive())
.deleted(store.getDeleted())
.createdAt(store.getCreatedAt())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,21 @@

import com.nowait.applicationuser.store.dto.StoreDepartmentReadResponse;
import com.nowait.applicationuser.store.dto.StoreDetailReadResponse;
import com.nowait.applicationuser.store.dto.StorePageReadDto;
import com.nowait.applicationuser.store.dto.StorePageReadResponse;
import com.nowait.applicationuser.store.dto.StoreSearchResponse;
import com.nowait.applicationuser.store.dto.StoreWaitingInfo;
import com.nowait.domaincorerdb.user.entity.MemberDetails;
import com.nowait.domainuserrdb.oauth.dto.CustomOAuth2User;

public interface StoreService {

StoreDepartmentReadResponse getAllStoresByPageAndDeparments(Pageable pageable);
StoreDepartmentReadResponse getAllStoresByPageAndDeparments(Pageable pageable, CustomOAuth2User customOAuth2User);

StoreDetailReadResponse getStoreByStoreId(Long storeId, CustomOAuth2User customOAuth2User);

List<StorePageReadResponse> searchByKeywordNative(String name);
List<StoreSearchResponse> searchByKeywordNative(String name);

List<StoreWaitingInfo> getStoresByWaitingCount(boolean desc);

List<StorePageReadDto> getAllStoresByPageAndDeparments(List<Long> storeIds, Set<Long> bookmarkedSet);
List<StorePageReadResponse> getAllStoresByPageAndDeparments(List<Long> storeIds, Set<Long> bookmarkedSet);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
Expand All @@ -24,8 +25,8 @@
import com.nowait.applicationuser.store.dto.StoreDepartmentReadResponse;
import com.nowait.applicationuser.store.dto.StoreDetailReadResponse;
import com.nowait.applicationuser.store.dto.StoreImageUploadResponse;
import com.nowait.applicationuser.store.dto.StorePageReadDto;
import com.nowait.applicationuser.store.dto.StorePageReadResponse;
import com.nowait.applicationuser.store.dto.StoreSearchResponse;
import com.nowait.applicationuser.store.dto.StoreWaitingInfo;
import com.nowait.domaincorerdb.department.entity.Department;
import com.nowait.domaincorerdb.department.repository.DepartmentRepository;
Expand All @@ -40,6 +41,7 @@
import com.nowait.domaincorerdb.user.exception.UserNotFoundException;
import com.nowait.domaincorerdb.user.repository.UserRepository;
import com.nowait.domaincoreredis.common.util.RedisKeyUtils;
import com.nowait.domainuserrdb.bookmark.entity.Bookmark;
import com.nowait.domainuserrdb.bookmark.repository.BookmarkRepository;
import com.nowait.domainuserrdb.oauth.dto.CustomOAuth2User;

Expand All @@ -59,7 +61,10 @@ public class StoreServiceImpl implements StoreService {

@Override
@Transactional(readOnly = true)
public StoreDepartmentReadResponse getAllStoresByPageAndDeparments(Pageable pageable) {
public StoreDepartmentReadResponse getAllStoresByPageAndDeparments(Pageable pageable, CustomOAuth2User customOAuth2User) {

User user = customOAuth2User.getUser();

// 1) 페이징된 Store 스냅샷 조회
Slice<Store> slice = storeRepository.findAllByDeletedFalseOrderByStoreIdAsc(pageable);
List<Store> stores = slice.getContent();
Expand All @@ -73,6 +78,14 @@ public StoreDepartmentReadResponse getAllStoresByPageAndDeparments(Pageable page
.distinct()
.toList();

// 2) 사용자 북마크된 storeId 집합 조회
List<Long> storeBookmarkIds = bookmarkRepository.findAllByUser(user)
.stream()
.map(Bookmark::getStore)
.map(Store::getStoreId)
.toList();
Set<Long> bookmarkedSet = new HashSet<>(storeIds);

// 2-1) Redis에서 각 Store의 웨이팅 사이즈 조회
Map<Long, Long> waitingSizeMap = storeIds.stream()
.collect(Collectors.toMap(
Expand Down Expand Up @@ -105,16 +118,21 @@ public StoreDepartmentReadResponse getAllStoresByPageAndDeparments(Pageable page
Department::getName
));

List<Bookmark> allBookmarks = bookmarkRepository.findStoreIdByUser(user);
Map<Long, Boolean> bookmarkMap = allBookmarks.stream()
.collect(Collectors.toMap(
bookmark -> bookmark.getStore().getStoreId(),
b -> Boolean.TRUE
));

// 5) Dto 매핑
List<StorePageReadResponse> content = stores.stream()
.map(store -> {
List<StoreImageUploadResponse> imgs = imageMap
.getOrDefault(store.getStoreId(), List.of());
String departmentName = deptNameMap
.getOrDefault(store.getDepartmentId(), "Unknown Department");
Long waitingCount =
waitingSizeMap.getOrDefault(store.getStoreId(), 0L);
return StorePageReadResponse.fromEntity(store, imgs, departmentName, waitingCount);
List<StoreImageUploadResponse> imgs = imageMap.getOrDefault(store.getStoreId(), List.of());
String departmentName = deptNameMap.getOrDefault(store.getDepartmentId(), "Unknown Department");
Long waitingCount = waitingSizeMap.getOrDefault(store.getStoreId(), 0L);
Boolean isBookmark = bookmarkMap.getOrDefault(store.getStoreId(), false);
return StorePageReadResponse.fromEntity(store, imgs, departmentName, waitingCount, isBookmark);
})
.toList();

Expand Down Expand Up @@ -153,7 +171,7 @@ public StoreDetailReadResponse getStoreByStoreId(Long storeId, CustomOAuth2User
}

@Override
public List<StorePageReadResponse> searchByKeywordNative(String keyword) {
public List<StoreSearchResponse> searchByKeywordNative(String keyword) {
if (keyword == null || keyword.isBlank()) {
throw new StoreParamEmptyException();
}
Expand Down Expand Up @@ -210,7 +228,7 @@ public List<StorePageReadResponse> searchByKeywordNative(String keyword) {
.getOrDefault(store.getDepartmentId(), "Unknown Department");
Long waitingCount =
waitingSizeMap.getOrDefault(store.getStoreId(), 0L);
return StorePageReadResponse.fromEntity(store, imgs, departmentName, waitingCount);
return StoreSearchResponse.fromEntity(store, imgs, departmentName, waitingCount);
})
.toList();
}
Expand Down Expand Up @@ -285,7 +303,7 @@ private RedisConnection getSafeConnection() {

@Override
@Transactional(readOnly = true)
public List<StorePageReadDto> getAllStoresByPageAndDeparments(List<Long> storeIds, Set<Long> bookmarkedSet) {
public List<StorePageReadResponse> getAllStoresByPageAndDeparments(List<Long> storeIds, Set<Long> bookmarkedSet) {
// 1) 페이징된 Store 스냅샷 조회
List<Store> stores = storeRepository.findAllByStoreIdInOrderByStoreIdAsc(storeIds);

Expand Down Expand Up @@ -328,7 +346,7 @@ public List<StorePageReadDto> getAllStoresByPageAndDeparments(List<Long> storeId
));

// 5) Dto 매핑
List<StorePageReadDto> content = stores.stream()
List<StorePageReadResponse> content = stores.stream()
.map(store -> {
List<StoreImageUploadResponse> imgs = imageMap
.getOrDefault(store.getStoreId(), List.of());
Expand All @@ -338,7 +356,7 @@ public List<StorePageReadDto> getAllStoresByPageAndDeparments(List<Long> storeId
waitingSizeMap.getOrDefault(store.getStoreId(), 0L);
boolean isBookmark = bookmarkedSet.contains(store.getStoreId());

return StorePageReadDto.fromEntity(store, imgs, departmentName, waitingCount, isBookmark);
return StorePageReadResponse.fromEntity(store, imgs, departmentName, waitingCount, isBookmark);
})
.toList();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.nowait.domainuserrdb.bookmark.repository;

import java.awt.print.Book;
import java.util.Collection;
import java.util.List;

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

Collection<Bookmark> findAllByUser(User user);

List<Bookmark> findStoreIdByUser(User user);
}