Refactor: is bookmark 기능 리팩토링#179
Conversation
…okmarkedSet 파라미터 추가
Walkthrough이번 변경에서는 즐겨찾기(북마크) 관련 DTO와 서비스 메서드의 시그니처 및 내부 구현이 전반적으로 리팩토링되었습니다. 북마크 여부를 나타내는 필드가 통일되고, 관련 메서드들이 새로운 파라미터와 DTO를 사용하도록 수정되었습니다. 또한, 새로운 DTO 클래스가 추가되었습니다. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant BookmarkService
participant StoreService
participant StoreRepository
User->>BookmarkService: getBookmarks(CustomOAuth2User)
BookmarkService->>BookmarkService: 북마크된 storeId 리스트 조회
BookmarkService->>BookmarkService: storeId 리스트로 Set<Long> bookmarkedSet 생성
BookmarkService->>StoreService: getAllStoresByPageAndDeparments(storeIds, bookmarkedSet)
StoreService->>StoreRepository: storeId 리스트로 매장 정보 조회
StoreService->>StoreService: 각 매장에 대해 bookmarkedSet 포함 여부로 isBookmark 설정
StoreService-->>BookmarkService: StorePageReadDto/StorePageReadResponse 리스트 반환
BookmarkService-->>User: 북마크 매장 리스트 반환
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20분 Possibly related PRs
Suggested reviewers
Note ⚡️ Unit Test Generation is now available in beta!Learn more here, or try it out under "Finishing Touches" below. ✨ Finishing Touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (3)
nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StorePageReadResponse.java (1)
32-59: 코드 중복 개선을 위한 리팩토링 제안fromEntity 메서드의 이미지 필터링 로직이 StoreReadDto와 StorePageReadDto에서도 동일하게 반복되고 있습니다. 이런 공통 로직을 유틸리티 메서드로 추출하여 코드 중복을 줄이는 것을 고려해보세요.
예시 리팩토링:
+ // 공통 유틸리티 클래스에서 + public static class StoreImageUtils { + public static StoreImageUploadResponse getProfileImage(List<StoreImageUploadResponse> allImages) { + return allImages.stream() + .filter(image -> image.getImageType() == ImageType.PROFILE) + .findFirst() + .orElse(null); + } + + public static List<StoreImageUploadResponse> getBannerImages(List<StoreImageUploadResponse> allImages) { + return allImages.stream() + .filter(image -> image.getImageType() == ImageType.BANNER) + .toList(); + } + }nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StoreDepartmentReadResponse.java (1)
14-22: DTO 타입 변경 확인StorePageReadDto에서 StorePageReadResponse로의 타입 변경이 일관되게 적용되었습니다. 다만 필드명
storePageReadDtos가 복수형Dtos를 사용하고 있는데, 새로운 타입인StorePageReadResponse와 일치하도록storePageReadResponses로 변경하는 것이 더 명확할 것 같습니다.- private List<StorePageReadResponse> storePageReadDtos; + private List<StorePageReadResponse> storePageReadResponses;nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StoreDetailReadResponse.java (1)
34-36: 메서드 시그니처 통합 완료북마크 상태를 매개변수로 받도록 메서드를 통합한 것이 좋습니다. 다만 매개변수가 6개로 늘어났으므로, 향후 매개변수 객체 패턴을 고려해볼 수 있습니다.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (7)
nowait-app-user-api/src/main/java/com/nowait/applicationuser/bookmark/service/BookmarkService.java(2 hunks)nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StoreDepartmentReadResponse.java(1 hunks)nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StoreDetailReadResponse.java(4 hunks)nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StorePageReadDto.java(4 hunks)nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StorePageReadResponse.java(1 hunks)nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/service/StoreService.java(2 hunks)nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/service/StoreServiceImpl.java(8 hunks)
👮 Files not reviewed due to content moderation or server errors (2)
- nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StoreDetailReadResponse.java
- nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/service/StoreServiceImpl.java
🧰 Additional context used
🧬 Code Graph Analysis (3)
nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StorePageReadResponse.java (2)
nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StoreReadDto.java (1)
StoreReadDto(13-52)nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StoreImageUploadResponse.java (1)
StoreImageUploadResponse(9-25)
nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StorePageReadDto.java (1)
nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StoreReadDto.java (2)
StoreReadDto(13-52)fromEntity(28-51)
nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StoreDetailReadResponse.java (2)
nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StoreReadDto.java (1)
StoreReadDto(13-52)nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StoreImageUploadResponse.java (1)
StoreImageUploadResponse(9-25)
🔇 Additional comments (35)
nowait-app-user-api/src/main/java/com/nowait/applicationuser/bookmark/service/BookmarkService.java (2)
3-3: 새로운 import 추가 확인HashSet과 Set 임포트가 북마크 처리 최적화를 위해 적절히 추가되었습니다.
Also applies to: 6-6
65-67: 북마크 상태 처리 최적화storeIds 리스트를 HashSet으로 변환하여 O(1) 조회 성능을 확보하고, 이를 storeService에 전달하여 각 스토어의 북마크 상태를 효율적으로 확인할 수 있도록 개선된 구현입니다. 이 방식은 기존의 반복적인 조회보다 성능상 유리합니다.
nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/service/StoreService.java (3)
4-4: 새로운 import 추가 확인Set과 StorePageReadResponse 임포트가 메서드 시그니처 변경에 맞춰 적절히 추가되었습니다.
Also applies to: 11-11
21-21: 반환 타입 변경 확인searchByKeywordNative 메서드의 반환 타입이 새로운 StorePageReadResponse DTO로 변경되었습니다. 구현체에서도 동일하게 변경되었는지 확인이 필요합니다.
25-25: 북마크 처리를 위한 메서드 시그니처 개선getAllStoresByPageAndDeparments 메서드에 Set bookmarkedSet 파라미터가 추가되어 북마크 상태를 효율적으로 처리할 수 있게 되었습니다. 이는 BookmarkService에서의 변경사항과 일치합니다.
nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StorePageReadDto.java (2)
18-18: 북마크 필드 통합isBookmark Boolean 필드가 명확하게 정의되어 북마크 상태 처리가 단순화되었습니다.
33-33: 팩토리 메서드 통합 및 개선fromEntity 메서드에 Boolean isBookmark 파라미터가 추가되어 북마크 상태를 명시적으로 전달받도록 개선되었습니다. 이는 여러 팩토리 메서드를 하나로 통합하여 코드 복잡성을 줄이는 좋은 리팩토링입니다.
Also applies to: 46-46
nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/dto/StoreDetailReadResponse.java (10)
18-18: 북마크 필드명 표준화 완료
isBookmarked에서isBookmark로 필드명을 변경하여 다른 DTO들과 일관성을 맞춘 것이 좋습니다.
49-49: 빌더에서 새로운 매개변수 사용 확인새로운
isBookmark매개변수를 올바르게 빌더에 적용했습니다.
63-63: 생성 시간 필드 추가 확인
createdAt필드를 빌더에 추가하여 DTO의 완성도를 높인 것이 좋습니다.
18-18: 필드명 표준화가 잘 적용되었습니다.
isBookmarked에서isBookmark로 변경하여 북마크 관련 필드명을 전체 코드베이스에서 통일한 것이 좋습니다.
34-36: 메서드 통합이 잘 이루어졌습니다.
fromEntity메서드가Boolean isBookmark파라미터를 추가로 받도록 업데이트되어 이전의fromEntityWithBookmark메서드 기능을 통합한 것이 좋습니다. 이는 메서드 중복을 제거하고 일관된 DTO 생성 방식을 제공합니다.
49-49: 빌더 패턴 사용이 올바르게 업데이트되었습니다.새로운
isBookmark파라미터와createdAt필드가 빌더에 올바르게 매핑되어 통합된 메서드 기능이 제대로 구현되었습니다.Also applies to: 63-63
18-18: 북마크 필드명 표준화가 잘 적용되었습니다.
isBookmarked에서isBookmark로 변경하여 다른 DTO들과 일관된 네이밍 컨벤션을 유지하고 있습니다.
34-36: 팩토리 메서드 통합이 잘 구현되었습니다.
fromEntity메서드가 북마크 상태를 매개변수로 받도록 변경되어, 이전의 별도 메서드들의 기능을 하나로 통합했습니다. 이는 유지보수성을 개선하고 DTO 생성의 일관성을 높입니다.
49-49: 빌더 패턴이 올바르게 업데이트되었습니다.새로운 필드명과 매개변수를 사용하여 빌더가 정확히 구성되었습니다.
63-63: 생성일시 필드 추가가 적절합니다.
createdAt필드를 빌더에 추가하여 스토어의 완전한 정보를 응답에 포함하도록 개선되었습니다.nowait-app-user-api/src/main/java/com/nowait/applicationuser/store/service/StoreServiceImpl.java (18)
8-8: 필요한 import 추가 확인북마크된 스토어 ID 집합을 처리하기 위한
Setimport 추가가 적절합니다.
28-28: 새로운 응답 DTO import 추가 확인
StorePageReadResponseDTO import 추가가 적절합니다.
109-109: DTO 타입 변경 완료
StorePageReadDto에서StorePageReadResponse로 일관되게 변경한 것이 좋습니다.Also applies to: 117-117
140-141: 북마크 처리 로직 개선북마크 상태를 한 번만 조회하여 DTO 생성자에 전달하는 방식으로 개선한 것이 효율적입니다.
Also applies to: 152-152
156-156: 검색 메서드 반환 타입 업데이트검색 메서드의 반환 타입을 새로운 응답 DTO로 일관되게 변경했습니다.
Also applies to: 213-213
288-288: 북마크 집합을 활용한 효율적인 처리북마크된 스토어 ID 집합을 매개변수로 받아 개별 데이터베이스 조회를 피하고 효율적으로 북마크 상태를 확인하는 방식이 우수합니다.
Also applies to: 339-341
8-8: 필요한 import가 적절히 추가되었습니다.
Setimport가 새로운bookmarkedSet파라미터를 지원하기 위해 추가되었습니다.
28-28: 새로운 DTO 클래스 import가 추가되었습니다.
StorePageReadResponseimport가 추가되어 기존StorePageReadDto를 대체하는 리팩토링을 지원합니다.
109-109: DTO 클래스 변경이 일관되게 적용되었습니다.
StorePageReadDto에서StorePageReadResponse로의 변경이 반환 타입과 팩토리 메서드 호출에서 일관되게 적용되었습니다.Also applies to: 117-117
140-141: 북마크 처리 로직이 효율적으로 통합되었습니다.북마크 존재 여부를 한 번만 확인하여
boolean변수로 저장하고, 이를fromEntity메서드에 전달하는 방식으로 개선되었습니다. 이는 코드의 명확성과 일관성을 향상시킵니다.Also applies to: 152-152
156-156: 검색 메서드도 일관된 DTO 변경이 적용되었습니다.
searchByKeywordNative메서드의 반환 타입과 팩토리 메서드 호출이 새로운StorePageReadResponseDTO를 사용하도록 일관되게 업데이트되었습니다.Also applies to: 213-213
288-288: 북마크 세트를 활용한 효율적인 처리가 구현되었습니다.
Set<Long> bookmarkedSet파라미터를 받아서 각 매장의 북마크 상태를contains()메서드로 효율적으로 확인하는 방식이 잘 구현되었습니다. 이는 대량의 매장 데이터를 처리할 때 성능상 이점을 제공합니다.Also applies to: 339-341
8-8: 필요한 임포트가 추가되었습니다.북마크된 스토어 ID 집합을 처리하기 위한 Set 임포트가 적절히 추가되었습니다.
28-28: 새로운 DTO 임포트가 추가되었습니다.
StorePageReadResponse임포트 추가로 리팩토링된 DTO 구조를 반영하고 있습니다.
109-109: DTO 타입 변경이 일관되게 적용되었습니다.반환 타입과 팩토리 메서드 호출이 새로운
StorePageReadResponseDTO를 사용하도록 올바르게 변경되었습니다.Also applies to: 117-117
140-141: 북마크 처리 로직이 개선되었습니다.북마크 상태를 한 번만 조회하여 변수에 저장하고, 이를 DTO 생성 시 전달하는 방식으로 효율성과 일관성이 향상되었습니다.
Also applies to: 152-152
156-156: 검색 메서드의 DTO 타입이 일관되게 변경되었습니다.검색 기능에서도 새로운
StorePageReadResponseDTO를 사용하도록 올바르게 업데이트되었습니다.Also applies to: 213-213
288-288: 북마크 세트를 활용한 메서드 오버로딩이 잘 구현되었습니다.북마크된 스토어 ID 집합을 매개변수로 받아 효율적으로 북마크 상태를 확인하고 DTO에 전달하는 로직이 깔끔하게 구현되었습니다.
Also applies to: 339-341
작업 요약
Issue Link
#178
문제점 및 어려움
해결 방안
Reference
Summary by CodeRabbit
신규 기능
개선 사항