Skip to content

Commit db9a776

Browse files
authored
Merge pull request #38 from HANA-IEUM/bug/group-bucketlist-34
fix: 버킷리스트 그룹원 조회
2 parents 5339b1b + 124fbc4 commit db9a776

3 files changed

Lines changed: 67 additions & 27 deletions

File tree

src/main/java/com/hanaieum/server/domain/bucketList/controller/BucketListController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public ResponseEntity<ApiResponse<MyBucketListDetailResponse>> getBucketListDeta
104104
return ResponseEntity.ok(ApiResponse.ok(response));
105105
}
106106

107-
@Operation(summary = "그룹원의 진행중인 버킷리스트 목록 조회", description = "같은 그룹에 속한 멤버의 진행중인 공개 버킷리스트 목록을 조회합니다.")
107+
@Operation(summary = "그룹원의 진행중인 버킷리스트 목록 조회", description = "같은 그룹에 속한 멤버의 진행중인 버킷리스트 목록을 조회합니다. 공개된 버킷리스트와 본인이 참여자인 비공개 버킷리스트가 조회됩니다.")
108108
@ApiResponses({
109109
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "그룹원 진행중인 버킷리스트 목록 조회 성공"),
110110
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "401", description = "인증 실패"),
@@ -119,7 +119,7 @@ public ResponseEntity<ApiResponse<List<BucketListResponse>>> getGroupInProgressB
119119
return ResponseEntity.ok(ApiResponse.ok(response));
120120
}
121121

122-
@Operation(summary = "그룹원의 종료된 버킷리스트 목록 조회", description = "같은 그룹에 속한 멤버의 종료된 공개 버킷리스트 목록을 조회합니다.")
122+
@Operation(summary = "그룹원의 종료된 버킷리스트 목록 조회", description = "같은 그룹에 속한 멤버의 종료된 버킷리스트 목록을 조회합니다. 공개된 버킷리스트와 본인이 참여자인 비공개 버킷리스트가 조회됩니다.")
123123
@ApiResponses({
124124
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "그룹원 종료된 버킷리스트 목록 조회 성공"),
125125
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "401", description = "인증 실패"),

src/main/java/com/hanaieum/server/domain/bucketList/repository/BucketListRepository.java

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,19 @@ public interface BucketListRepository extends JpaRepository<BucketList, Long> {
2525
@Query("SELECT bl FROM BucketList bl LEFT JOIN FETCH bl.participants p LEFT JOIN FETCH p.member WHERE bl.id = :id AND bl.deleted = :deleted")
2626
Optional<BucketList> findByIdAndDeletedWithParticipants(@Param("id") Long id, @Param("deleted") boolean deleted);
2727

28-
// 그룹원의 진행중인 버킷리스트 목록 조회 (공개된 것만)
29-
@Query("SELECT bl FROM BucketList bl WHERE bl.member.id = :groupMemberId AND bl.status = 'IN_PROGRESS' AND bl.deleted = false AND bl.publicFlag = true ORDER BY bl.createdAt DESC")
30-
List<BucketList> findByGroupMemberIdAndInProgressAndPublic(@Param("groupMemberId") Long groupMemberId);
31-
32-
// 그룹원의 완료된 버킷리스트 목록 조회 (공개된 것만)
33-
@Query("SELECT bl FROM BucketList bl WHERE bl.member.id = :groupMemberId AND bl.status = 'COMPLETED' AND bl.deleted = false AND bl.publicFlag = true ORDER BY bl.createdAt DESC")
34-
List<BucketList> findByGroupMemberIdAndCompletedAndPublic(@Param("groupMemberId") Long groupMemberId);
35-
36-
// 참여중인 버킷리스트 조회 (참여자 테이블을 통해)
37-
@Query("SELECT DISTINCT bl FROM BucketList bl " +
38-
"JOIN bl.participants p " +
39-
"WHERE p.member.id = :memberId " +
40-
"AND p.active = true " +
41-
"AND bl.deleted = :deleted " +
42-
"ORDER BY bl.createdAt DESC")
43-
List<BucketList> findParticipatedBucketListsByMember(@Param("memberId") Long memberId, @Param("deleted") boolean deleted);
28+
// 그룹원의 진행중인 버킷리스트 목록 조회 (모든 상태)
29+
@Query("SELECT bl FROM BucketList bl WHERE bl.member.id = :groupMemberId AND bl.status = 'IN_PROGRESS' AND bl.deleted = false ORDER BY bl.createdAt DESC")
30+
List<BucketList> findByGroupMemberIdAndInProgress(@Param("groupMemberId") Long groupMemberId);
31+
32+
// 그룹원의 완료된 버킷리스트 목록 조회 (모든 상태)
33+
@Query("SELECT bl FROM BucketList bl WHERE bl.member.id = :groupMemberId AND bl.status = 'COMPLETED' AND bl.deleted = false ORDER BY bl.createdAt DESC")
34+
List<BucketList> findByGroupMemberIdAndCompleted(@Param("groupMemberId") Long groupMemberId);
35+
36+
// 특정 멤버가 참여자인 버킷리스트 조회
37+
@Query("SELECT DISTINCT bl FROM BucketList bl JOIN bl.participants p " +
38+
"WHERE p.member.id = :memberId AND p.active = true AND bl.deleted = false " +
39+
"ORDER BY bl.createdAt DESC")
40+
List<BucketList> findByParticipantMemberId(@Param("memberId") Long memberId);
4441

4542
// Transfer Service용 - ID로 삭제되지 않은 버킷리스트 조회
4643
Optional<BucketList> findByIdAndDeletedFalse(Long id);

src/main/java/com/hanaieum/server/domain/bucketList/service/BucketListServiceImpl.java

Lines changed: 52 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import java.time.LocalDate;
2424
import java.util.List;
25+
import java.util.ArrayList;
2526

2627
@Slf4j
2728
@Service
@@ -188,7 +189,7 @@ public List<BucketListResponse> getParticipatedBucketLists() {
188189
Long memberId = member.getId();
189190

190191
// 삭제되지 않은 해당 회원이 참여중인 버킷리스트 조회 (참여일 기준 내림차순)
191-
List<BucketList> bucketLists = bucketListRepository.findParticipatedBucketListsByMember(memberId, false);
192+
List<BucketList> bucketLists = bucketListRepository.findByParticipantMemberId(memberId);
192193

193194
log.info("참여중인 버킷리스트 목록 조회 완료: 총 {}개", bucketLists.size());
194195

@@ -239,12 +240,33 @@ public List<BucketListResponse> getGroupInProgressBucketLists(Long groupMemberId
239240
throw new CustomException(ErrorCode.MEMBER_NOT_FOUND);
240241
}
241242

242-
// 그룹원의 진행중인 공개 버킷리스트 조회
243-
List<BucketList> bucketLists = bucketListRepository.findByGroupMemberIdAndInProgressAndPublic(groupMemberId);
243+
// 1. 그룹원의 모든 진행중인 버킷리스트 조회 (공개 여부 상관없이)
244+
List<BucketList> allBucketLists = bucketListRepository.findByGroupMemberIdAndInProgress(groupMemberId);
245+
246+
// 2. 본인이 참여자인 비공개 진행중인 버킷리스트 조회
247+
List<BucketList> participatedBucketLists = bucketListRepository.findByParticipantMemberId(currentMember.getId())
248+
.stream()
249+
.filter(bl -> bl.getMember().getId().equals(groupMemberId) && bl.getStatus() == BucketListStatus.IN_PROGRESS)
250+
.toList();
251+
252+
// 3. 접근 가능한 버킷리스트 필터링 (공개된 것 + 참여자인 것)
253+
List<BucketList> accessibleBucketLists = new ArrayList<>();
254+
255+
for (BucketList bucketList : allBucketLists) {
256+
// 공개된 버킷리스트이거나 본인이 참여자인 경우
257+
if (bucketList.isPublicFlag() ||
258+
participatedBucketLists.stream().anyMatch(p -> p.getId().equals(bucketList.getId()))) {
259+
accessibleBucketLists.add(bucketList);
260+
}
261+
}
244262

245-
log.info("그룹원의 진행중인 버킷리스트 목록 조회 완료: groupMemberId = {}, 총 {}개", groupMemberId, bucketLists.size());
263+
// 4. 생성일 기준으로 정렬
264+
accessibleBucketLists.sort((a, b) -> b.getCreatedAt().compareTo(a.getCreatedAt()));
246265

247-
return bucketLists.stream()
266+
log.info("그룹원의 진행중인 버킷리스트 목록 조회 완료: groupMemberId = {}, 총 {}개 (전체: {}, 접근가능: {})",
267+
groupMemberId, accessibleBucketLists.size(), allBucketLists.size(), accessibleBucketLists.size());
268+
269+
return accessibleBucketLists.stream()
248270
.map(BucketListResponse::of)
249271
.toList();
250272
}
@@ -270,12 +292,33 @@ public List<BucketListResponse> getGroupCompletedBucketLists(Long groupMemberId)
270292
throw new CustomException(ErrorCode.MEMBER_NOT_FOUND);
271293
}
272294

273-
// 그룹원의 완료된 공개 버킷리스트 조회
274-
List<BucketList> bucketLists = bucketListRepository.findByGroupMemberIdAndCompletedAndPublic(groupMemberId);
295+
// 1. 그룹원의 모든 완료된 버킷리스트 조회 (공개 여부 상관없이)
296+
List<BucketList> allBucketLists = bucketListRepository.findByGroupMemberIdAndCompleted(groupMemberId);
297+
298+
// 2. 본인이 참여자인 비공개 완료된 버킷리스트 조회
299+
List<BucketList> participatedBucketLists = bucketListRepository.findByParticipantMemberId(currentMember.getId())
300+
.stream()
301+
.filter(bl -> bl.getMember().getId().equals(groupMemberId) && bl.getStatus() == BucketListStatus.COMPLETED)
302+
.toList();
303+
304+
// 3. 접근 가능한 버킷리스트 필터링 (공개된 것 + 참여자인 것)
305+
List<BucketList> accessibleBucketLists = new ArrayList<>();
306+
307+
for (BucketList bucketList : allBucketLists) {
308+
// 공개된 버킷리스트이거나 본인이 참여자인 경우
309+
if (bucketList.isPublicFlag() ||
310+
participatedBucketLists.stream().anyMatch(p -> p.getId().equals(bucketList.getId()))) {
311+
accessibleBucketLists.add(bucketList);
312+
}
313+
}
275314

276-
log.info("그룹원의 완료된 버킷리스트 목록 조회 완료: groupMemberId = {}, 총 {}개", groupMemberId, bucketLists.size());
315+
// 4. 생성일 기준으로 정렬
316+
accessibleBucketLists.sort((a, b) -> b.getCreatedAt().compareTo(a.getCreatedAt()));
277317

278-
return bucketLists.stream()
318+
log.info("그룹원의 완료된 버킷리스트 목록 조회 완료: groupMemberId = {}, 총 {}개 (전체: {}, 접근가능: {})",
319+
groupMemberId, accessibleBucketLists.size(), allBucketLists.size(), accessibleBucketLists.size());
320+
321+
return accessibleBucketLists.stream()
279322
.map(BucketListResponse::of)
280323
.toList();
281324
}

0 commit comments

Comments
 (0)