|
9 | 9 | import com.mmc.bookduck.domain.book.repository.UserBookRepository; |
10 | 10 | import com.mmc.bookduck.domain.book.service.BookInfoService; |
11 | 11 | import com.mmc.bookduck.domain.club.dto.common.ClubBookInfoDto; |
| 12 | +import com.mmc.bookduck.domain.club.dto.common.ClubMemberSummaryDto; |
12 | 13 | import com.mmc.bookduck.domain.club.dto.common.ClubMemberRoleInfo; |
13 | 14 | import com.mmc.bookduck.domain.club.dto.request.ClubCreateRequestDto; |
14 | 15 | import com.mmc.bookduck.domain.club.dto.request.ClubJoinRequestDto; |
@@ -73,20 +74,29 @@ public Long createClub(ClubCreateRequestDto requestDto) { |
73 | 74 | } |
74 | 75 |
|
75 | 76 | @Transactional(readOnly = true) |
76 | | - public ClubArchiveListResponseDto getClubArchives(Long clubId, Pageable pageable) { |
| 77 | + public ClubArchiveListResponseDto getClubArchives(Long clubId, Long memberId, Pageable pageable) { |
77 | 78 | User currentUser = userService.getCurrentUser(); |
78 | 79 | Club club = getClubById(clubId); |
79 | 80 | // 클럽 멤버 및 상태 조회 |
80 | 81 | ClubMember currentMember = clubMemberService.getClubMemberByClubAndUser(club, currentUser); |
81 | 82 | LocalDateTime lastReadAt = markAsReadAndGetLastReadAt(currentMember); |
82 | 83 | BookInfo targetBook = club.getBookInfo(); |
83 | 84 |
|
84 | | - // 클럽 멤버 전체 userId 추출 |
85 | | - List<Long> memberUserIds = clubMemberService.getClubMembersByClub(club).stream() |
86 | | - .map(cm -> cm.getUser().getUserId()) |
87 | | - .toList(); |
| 85 | + List<Long> memberUserIds; |
| 86 | + if (memberId != null) { |
| 87 | + // 특정 멤버만 필터링 |
| 88 | + ClubMember targetMember = clubMemberService.getClubMemberById(memberId); |
| 89 | + if (!targetMember.getClub().getClubId().equals(clubId)) { |
| 90 | + throw new CustomException(ErrorCode.CLUB_MEMBER_NOT_FOUND); |
| 91 | + } |
| 92 | + memberUserIds = List.of(targetMember.getUser().getUserId()); |
| 93 | + } else { |
| 94 | + // 전체 멤버 |
| 95 | + memberUserIds = clubMemberService.getClubMembersByClub(club).stream() |
| 96 | + .map(cm -> cm.getUser().getUserId()) |
| 97 | + .toList(); |
| 98 | + } |
88 | 99 |
|
89 | | - // 전체 Excerpt / Review 조회 (읽음 여부 필터 제거) |
90 | 100 | List<Excerpt> excerpts = excerptRepository.findClubExcerpts( |
91 | 101 | targetBook.getBookInfoId(), |
92 | 102 | memberUserIds, |
@@ -246,7 +256,12 @@ public ClubDetailResponseDto getClubDetail(Long clubId) { |
246 | 256 | .map(UserBook::getUserBookId) |
247 | 257 | .orElse(null); |
248 | 258 |
|
249 | | - return ClubDetailResponseDto.from(club, club.getBookInfo(), memberCount, roleInfo.isMember(), roleInfo.memberRole(), userBookId); |
| 259 | + // 클럽 멤버 목록 조회 |
| 260 | + List<ClubMemberSummaryDto> members = clubMemberService.getClubMembersByClub(club).stream() |
| 261 | + .map(ClubMemberSummaryDto::from) |
| 262 | + .toList(); |
| 263 | + |
| 264 | + return ClubDetailResponseDto.from(club, club.getBookInfo(), memberCount, roleInfo.isMember(), roleInfo.memberRole(), userBookId, members); |
250 | 265 | } |
251 | 266 |
|
252 | 267 | // LEADER만 수정/삭제 가능 |
|
0 commit comments