-
Notifications
You must be signed in to change notification settings - Fork 0
feat: 앨범 참여자 조회 로직 구현 #38
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Walkthrough앨범 참여자 조회 API와 관련 DTO/매퍼/컨트롤러/Swagger 및 리포지토리 쿼리 변경을 추가하고, 서비스에 참여자 조회·검증·정렬 로직을 구현했습니다. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant Client
participant Controller as AlbumController
participant Service as AlbumService
participant Repo as UserAlbumRepository / AlbumRepository
participant Mapper as UserAlbumMapper
Client->>Controller: GET /v1/album/{code}/participants
Controller->>Service: getAlbumParticipantList(currentUser, code)
Service->>Repo: find album by code / findAllByAlbumId(albumId) (JOIN FETCH user)
Repo-->>Service: Album, List<UserAlbum> (user 포함)
Service->>Service: 참여 여부 검증, 만료 판정, 역할 매핑
Service->>Service: buildSortedParticipantInfos(userAlbums, currentUser)
loop 매핑
Service->>Mapper: toParticipantInfo(user, role, isMe)
Mapper-->>Service: ParticipantInfo
end
Service->>Mapper: toAlbumParticipantResponse(album, isExpired, myRole, participants)
Mapper-->>Service: AlbumParticipantResponse
Service-->>Controller: AlbumParticipantResponse
Controller-->>Client: CommonResponse<AlbumParticipantResponse> (ALBUM_PARTICIPANT_FETCH_SUCCESS)
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes
Possibly related issues
Possibly related PRs
Suggested reviewers
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
🧰 Additional context used🧬 Code graph analysis (1)src/main/java/com/cheeeese/album/application/AlbumService.java (2)
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. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 4
🧹 Nitpick comments (2)
src/main/java/com/cheeeese/album/infrastructure/mapper/UserAlbumMapper.java (1)
32-48: participants 리스트 불변 처리 제안
participants리스트가 외부에서 그대로 전달되면 이후 변경에 의해 응답 내용이 의도치 않게 바뀔 수 있습니다. 복사본을 만들어 넣으면 DTO 불변성이 보장되어 더 안전합니다.- .participants(participants) + .participants(List.copyOf(participants))src/main/java/com/cheeeese/album/presentation/AlbumController.java (1)
5-5: 와일드카드 import 대신 명시적 import 사용을 고려하세요.가독성과 명확성을 위해 와일드카드 import(
.*) 대신 사용하는 클래스들을 명시적으로 import하는 것이 권장됩니다.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (7)
src/main/java/com/cheeeese/album/application/AlbumService.java(3 hunks)src/main/java/com/cheeeese/album/dto/response/AlbumParticipantListResponse.java(1 hunks)src/main/java/com/cheeeese/album/dto/response/AlbumParticipantResponse.java(1 hunks)src/main/java/com/cheeeese/album/infrastructure/mapper/UserAlbumMapper.java(2 hunks)src/main/java/com/cheeeese/album/presentation/AlbumController.java(2 hunks)src/main/java/com/cheeeese/album/presentation/swagger/AlbumSwagger.java(2 hunks)src/main/java/com/cheeeese/global/common/code/SuccessCode.java(1 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
src/main/java/com/cheeeese/album/application/AlbumService.java (1)
src/main/java/com/cheeeese/album/infrastructure/mapper/UserAlbumMapper.java (1)
UserAlbumMapper(12-50)
🔇 Additional comments (4)
src/main/java/com/cheeeese/album/dto/response/AlbumParticipantListResponse.java (1)
9-29: DTO 구조 정의 잘 되어 있습니다필수 필드와 스키마 메타데이터 구성이 명확해 응답 형태 이해가 수월합니다.
src/main/java/com/cheeeese/album/dto/response/AlbumParticipantResponse.java (1)
11-41: 참여자 응답 필드 구성 👍앨범 메타 정보와 참여자 목록을 한 번에 전달하도록 잘 정리되어 있어 클라이언트 측 활용이 용이해 보입니다.
src/main/java/com/cheeeese/global/common/code/SuccessCode.java (1)
27-27: 성공 코드 확장 적절합니다새 엔드포인트와 메시지가 자연스럽게 매핑되어 일관된 응답 체계를 유지할 수 있겠습니다.
src/main/java/com/cheeeese/album/presentation/AlbumController.java (1)
61-71: 구현이 올바릅니다!새로운 엔드포인트가 프로젝트의 컨트롤러 패턴을 잘 따르고 있으며, 적절한 서비스 계층 위임과 응답 래핑이 구현되어 있습니다.
src/main/java/com/cheeeese/album/presentation/swagger/AlbumSwagger.java
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
src/main/java/com/cheeeese/album/application/AlbumService.java (1)
32-34: 사용하지 않는 import 제거가 필요합니다.Line 34의
Mapimport가 코드에서 사용되지 않습니다. 이전 리뷰에서 roleMap을 제거하면서 더 이상 필요하지 않게 되었습니다.다음과 같이 수정하세요:
import java.util.Comparator; import java.util.List; -import java.util.Map; import java.util.Optional;
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
src/main/java/com/cheeeese/album/application/AlbumService.java(3 hunks)src/main/java/com/cheeeese/album/infrastructure/persistence/UserAlbumRepository.java(1 hunks)src/main/java/com/cheeeese/album/presentation/swagger/AlbumSwagger.java(2 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
src/main/java/com/cheeeese/album/application/AlbumService.java (1)
src/main/java/com/cheeeese/album/infrastructure/mapper/UserAlbumMapper.java (1)
UserAlbumMapper(12-50)
🔇 Additional comments (4)
src/main/java/com/cheeeese/album/infrastructure/persistence/UserAlbumRepository.java (1)
16-17: N+1 쿼리 문제가 올바르게 해결되었습니다!JOIN FETCH를 사용하여 User 엔티티를 즉시 로딩하도록 수정하여, 이전 리뷰에서 지적된 N+1 쿼리 문제를 올바르게 해결했습니다.
src/main/java/com/cheeeese/album/application/AlbumService.java (2)
144-166: 참여자 조회 로직이 잘 구현되었습니다!앨범 검증, 참여 여부 확인, 만료 상태 판단 등의 로직이 명확하게 구현되어 있습니다. 코드가 읽기 쉽고 각 단계의 책임이 명확히 분리되어 있습니다.
206-223: 이전 리뷰 제안이 올바르게 반영되었습니다!UserAlbum에서 직접 role을 가져오도록 리팩토링되어, 불필요한 roleMap 생성 및 조회가 제거되었습니다. 정렬 로직도 명확합니다:
- 현재 사용자 우선 (isMe)
- MAKER 역할 우선
- 이름순 정렬
이전 리뷰에서 제안된 개선사항이 모두 반영되었습니다.
src/main/java/com/cheeeese/album/presentation/swagger/AlbumSwagger.java (1)
220-256: API 문서가 잘 작성되었습니다!새로운 참여자 조회 API에 대한 문서가 명확하고 포괄적입니다:
- PathVariable 설명이 명확함
- 만료된 앨범과 유효한 앨범의 응답 차이가 잘 설명됨
- 적절한 응답 코드(200, 403) 정의
- 에러 케이스에 대한 예시 제공
zyovn
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수고하셧습니다~🎸🦖
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (1)
src/main/java/com/cheeeese/album/presentation/swagger/AlbumSwagger.java (1)
4-4: 와일드카드 임포트 대신 명시적 임포트 고려현재 와일드카드 임포트(
import com.cheeeese.album.dto.response.*)를 사용하고 있습니다. 명시적으로 필요한 클래스만 임포트하면 코드 가독성과 의존성 파악이 더 쉬워집니다. 다만 여러 Response 클래스를 사용하는 경우 와일드카드 임포트도 합리적인 선택일 수 있습니다.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
src/main/java/com/cheeeese/album/application/AlbumService.java(4 hunks)src/main/java/com/cheeeese/album/dto/response/AlbumInvitationResponse.java(1 hunks)src/main/java/com/cheeeese/album/infrastructure/mapper/AlbumMapper.java(2 hunks)src/main/java/com/cheeeese/album/presentation/swagger/AlbumSwagger.java(3 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
src/main/java/com/cheeeese/album/application/AlbumService.java (2)
src/main/java/com/cheeeese/album/infrastructure/mapper/AlbumMapper.java (1)
AlbumMapper(13-149)src/main/java/com/cheeeese/album/infrastructure/mapper/UserAlbumMapper.java (1)
UserAlbumMapper(12-50)
🔇 Additional comments (7)
src/main/java/com/cheeeese/album/presentation/swagger/AlbumSwagger.java (1)
220-256: LGTM! 새로운 API 문서화가 잘 되어 있습니다.앨범 참여자 조회 API의 Swagger 문서가 명확하고 상세하게 작성되었습니다. 응답 코드와 설명이 적절하며, PathVariable 및 로직 상세 설명도 포함되어 있습니다.
참고: 이전 리뷰에서 지적된 "evnetDate" 오타도 Line 229에서 "eventDate"로 수정된 것을 확인했습니다.
src/main/java/com/cheeeese/album/infrastructure/mapper/AlbumMapper.java (2)
62-72: 일관된 호스트→메이커 용어 변경
toInvitationResponse메서드의 파라미터명과 필드 매핑이 "호스트"에서 "메이커" 용어로 일관되게 변경되었습니다. DTO 변경사항과 정확히 일치합니다.
77-87: 만료된 앨범 응답도 일관되게 업데이트됨만료된 앨범의 초대장 응답에서도
makerName과makerProfileImage필드명이 일관되게 사용되고 있습니다. 만료 시 해당 정보를 null로 설정하는 것도 합리적입니다.src/main/java/com/cheeeese/album/dto/response/AlbumInvitationResponse.java (1)
23-27: DTO 필드명이 일관되게 변경되었습니다.
hostName/hostProfileImage에서makerName/makerProfileImage로의 필드명 변경이 명확하고, 관련된 모든 매퍼와 서비스 코드에서도 일관되게 업데이트되었습니다.src/main/java/com/cheeeese/album/application/AlbumService.java (3)
86-88: 용어 변경이 일관되게 적용되었습니다.
getMaker메서드를 호출하여 maker 정보를 가져오고, 이를AlbumMapper.toInvitationResponse에 전달하는 것이 명확하고 일관성 있습니다.
206-223: 이전 리뷰 제안이 잘 반영되었습니다.
buildSortedParticipantInfos메서드가 이전 리뷰 코멘트의 제안대로 리팩토링되었습니다:
- 불필요한
roleMap생성이 제거됨UserAlbum객체에서 직접user와role을 가져옴 (lines 212-213)- 정렬 로직이 명확함: 본인 → 메이커 → 이름순
코드가 더 간결하고 효율적으로 개선되었습니다.
144-166: 원본 리뷰 코멘트는 이미 해결된 사항입니다.
UserAlbumRepository의findAllByAlbumId메서드를 확인한 결과, 다음과 같이 구현되어 있습니다:@Query("SELECT ua FROM UserAlbum ua JOIN FETCH ua.user WHERE ua.album.id = :albumId") List<UserAlbum> findAllByAlbumId(@Param("albumId") Long albumId);JOIN FETCH가 이미 적용되어 있으므로 N+1 쿼리 문제는 해결되었습니다. 따라서
getAlbumParticipantList메서드의 로직은 문제가 없으며, 추가 조치가 필요하지 않습니다.
🔗 연관된 이슈
🚀 변경 유형
📝 작업 내용
isExpired필드로 만료 여부 구분📸 스크린샷
💬 리뷰 요구사항
Summary by CodeRabbit
New Features
Documentation
Chores