33import java .util .List ;
44import java .util .UUID ;
55import java .util .stream .Collectors ;
6+ import jombi .freemates .model .constant .Visibility ;
67import jombi .freemates .model .dto .BookmarkRequest ;
78import jombi .freemates .model .dto .BookmarkResponse ;
89import jombi .freemates .model .dto .CustomUserDetails ;
1920import jombi .freemates .util .exception .ErrorCode ;
2021import lombok .RequiredArgsConstructor ;
2122import lombok .extern .slf4j .Slf4j ;
23+ import org .springframework .data .domain .Page ;
24+ import org .springframework .data .domain .PageRequest ;
2225import org .springframework .stereotype .Service ;
2326import org .springframework .transaction .annotation .Transactional ;
2427import org .springframework .web .multipart .MultipartFile ;
@@ -33,6 +36,10 @@ public class BookmarkService {
3336 private final BookmarkPlaceRepository bookmarkPlaceRepository ;
3437 private final PlaceService placeService ;
3538
39+ /**
40+ * 즐겨찾기 생성
41+ *
42+ */
3643 @ Transactional
3744 public BookmarkResponse create (
3845 CustomUserDetails customUserDetails ,
@@ -64,34 +71,30 @@ public BookmarkResponse create(
6471 log .info ("북마크 생성 완료 - ID: {}, 사용자: {}" , b .getBookmarkId (), member .getNickname ());
6572
6673 // 응답 DTO 반환
67- return BookmarkResponse .builder ()
68- .bookmarkId (b .getBookmarkId ())
69- .memberId (member .getMemberId ())
70- .nickname (member .getNickname ())
71- .imageUrl (imageUrl )
72- .title (b .getTitle ())
73- .description (b .getDescription ())
74- .pinColor (b .getPinColor ())
75- .visibility (b .getVisibility ())
76- .build ();
74+ return convertToBookmarkResponse (b );
7775 }
7876
77+ /**
78+ * 멤버 별 즐겨찾기 목록 조회
79+ */
7980 @ Transactional (readOnly = true )
80- public List <BookmarkResponse > listByMember (CustomUserDetails customUserDetails ) {
81+ public List <BookmarkResponse > getMyBookmarks (CustomUserDetails customUserDetails ) {
8182 Member member = customUserDetails .getMember ();
8283 return bookmarkRepository .findAllByMember (member ).stream ()
83- .map (b -> BookmarkResponse .builder ()
84- .memberId (member .getMemberId ())
85- .nickname (member .getNickname ())
86- .imageUrl (b .getImageUrl ())
87- .title (b .getTitle ())
88- .description (b .getDescription ())
89- .pinColor (b .getPinColor ())
90- .visibility (b .getVisibility ())
91- .build ())
84+ .map (this ::convertToBookmarkResponse )
9285 .collect (Collectors .toList ());
9386 }
9487
88+ /**
89+ * 즐겨찾기 목록 조회 (페이징)
90+ */
91+ @ Transactional (readOnly = true )
92+ public Page <BookmarkResponse > getBookmarks (int page , int size , Visibility visibility ) {
93+ return bookmarkRepository
94+ .findByVisibility (visibility , PageRequest .of (page , size ))
95+ .map (this ::convertToBookmarkResponse );
96+ }
97+
9598 @ Transactional
9699 public void addPlaceToBookmark (
97100 CustomUserDetails customUserDetails ,
@@ -158,4 +161,17 @@ public List<PlaceDto> getPlacesByBookmarkId(UUID bookmarkId) {
158161 .collect (Collectors .toList ());
159162 }
160163
164+ public BookmarkResponse convertToBookmarkResponse (Bookmark bookmark ) {
165+ return BookmarkResponse .builder ()
166+ .bookmarkId (bookmark .getBookmarkId ())
167+ .memberId (bookmark .getMember ().getMemberId ())
168+ .nickname (bookmark .getMember ().getNickname ())
169+ .imageUrl (bookmark .getImageUrl ())
170+ .title (bookmark .getTitle ())
171+ .description (bookmark .getDescription ())
172+ .pinColor (bookmark .getPinColor ())
173+ .visibility (bookmark .getVisibility ())
174+ .build ();
175+ }
176+
161177}
0 commit comments