-
Notifications
You must be signed in to change notification settings - Fork 0
[refactor] 패키지 구조 정리 #81
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이번 변경은 전반적인 패키지 구조 정리와 함께, 도메인 엔티티 및 레포지토리의 네이밍 및 위치를 일관성 있게 재구성하였습니다. 주요 엔티티와 매퍼, 레포지토리, 포트 인터페이스, 서비스, 예외 코드 등이 새로운 패키지 구조에 맞게 이동·명명되었으며, 관련 테스트 코드도 이에 맞추어 수정되었습니다. Changes
Sequence Diagram(s)sequenceDiagram
participant Service as RoomShowRecruitingDetailViewService
participant Adapter as RoomParticipantCommandPersistenceAdapter
participant Repo as RoomParticipantJpaRepository
Service->>Adapter: findAllByRoomId(roomId)
Adapter->>Repo: findAllByRoomJpaEntity_RoomId(roomId)
Repo-->>Adapter: List<RoomParticipantJpaEntity>
Adapter->>Adapter: toDomainEntity 변환
Adapter-->>Service: List<RoomParticipant>
sequenceDiagram
participant Service as RecordCreateService
participant Adapter as RoomParticipantCommandPersistenceAdapter
participant Repo as RoomParticipantJpaRepository
Service->>Adapter: findByUserIdAndRoomId(userId, roomId)
Adapter->>Repo: findByUserJpaEntity_UserIdAndRoomJpaEntity_RoomId(userId, roomId)
Repo-->>Adapter: Optional<RoomParticipantJpaEntity>
Adapter->>Adapter: toDomainEntity 변환
Adapter-->>Service: RoomParticipant
Assessment against linked issues
Poem
📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (1)
🧰 Additional context used🧠 Learnings (1)src/main/java/konkuk/thip/room/adapter/out/persistence/RoomParticipantCommandPersistenceAdapter.java (1)🧬 Code Graph Analysis (1)src/main/java/konkuk/thip/room/adapter/out/persistence/RoomParticipantCommandPersistenceAdapter.java (2)
🔇 Additional comments (4)
✨ Finishing Touches
🪧 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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 9
🔭 Outside diff range comments (7)
src/main/java/konkuk/thip/attendanceCheck/adapter/out/persistence/AttendanceCheckQueryPersistenceAdapter.java (1)
11-11: 인터페이스 이름에 오타가 있습니다.구현하는 인터페이스 이름을 수정해야 합니다.
-public class AttendanceCheckQueryPersistenceAdapter implements AttendnaceCheckQueryPort { +public class AttendanceCheckQueryPersistenceAdapter implements AttendanceCheckQueryPort {src/main/java/konkuk/thip/comment/adapter/out/persistence/CommentQueryPersistenceAdapter.java (1)
13-15: 필드명 불일치 및 불필요 의존성 제거/정비 필요
CommentMapper타입의 필드가userMapper라는 혼동되는 이름으로 선언돼 있으며, 본 클래스 내에서 실제로 사용되지도 않습니다.
빈 주입은 계속 요구되므로,
- 이름을
commentMapper로 변경해 가독성을 높이고,- 당장 사용 계획이 없다면 필드를 삭제하여 불필요한 의존성을 제거하는 편이 좋습니다.
- private final CommentMapper userMapper; + // 필요 시 사용 목적에 맞춰 이름을 명확히 수정 + private final CommentMapper commentMapper;src/main/java/konkuk/thip/vote/adapter/out/persistence/repository/VoteQueryRepository.java (1)
3-13: Persistence 계층에서 Web DTO 직접 의존 ‑ 계층 침투 우려
RoomPlayingDetailViewResponse.CurrentVote(adapter.in.web.response) 타입을 persistence adapter가 반환하도록 정의하면,
hexagonal 구조에서 외부(inbound) 계층 DTO가 내부(outbound) 계층으로 침투하게 됩니다. 이는 계층 간 순환 의존을 야기하고, 테스트 및 재사용성을 낮춥니다.가능한 해결책:
- persistence 계층에서는 Projection Interface나 전용 Query DTO를 정의하고, 상위 계층에서 Web DTO로 매핑.
- CQRS 팀 컨벤션을 유지하더라도 최소한 adapter.out → adapter.in 방향 의존은 피하고 application 계층에서 매핑.
추가 논의 없으면 아래처럼 Query DTO로 치환 후 매핑을 권장합니다.
// 예시 DTO (adapter.out.querydto 패키지) public record CurrentVoteDto(Long voteId, String title, int participantCount) {}src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomQueryRepository.java (1)
3-5: Persistence 레이어에서 Web DTO 직접 참조 중단 필요
RoomQueryRepository.java(3–5행)에서 Web-layer Response DTO(RoomSearchResponse,RoomRecruitingDetailViewResponse,RoomGetHomeJoinedListResponse)를 직접 import하고 있습니다.
- Persistence → Web-layer 의존성은 DIP/클린 아키텍처 위반
- 테스트·재사용성 저하 및 패키지 재배치 시 파급 범위 확대
유사 패턴이 다른
*QueryRepository/*QueryPersistenceAdapter클래스에도 다수 발견되니 함께 점검해 주세요.해결 방안:
- Persistence 전용 Query DTO(
RoomSearchQueryDto등)를src/main/java/konkuk/thip/room/application/port/out/dto또는 persistence 패키지 내부에 정의- Application 계층으로 결과를 매핑한 뒤 Web DTO로 변환
예시:
-import konkuk.thip.room.adapter.in.web.response.RoomSearchResponse; +import konkuk.thip.room.application.port.out.dto.RoomSearchQueryDto; // 예시 DTOsrc/main/java/konkuk/thip/vote/adapter/out/persistence/repository/VoteQueryRepositoryImpl.java (1)
26-36: 페이지 조건 로직의 Null 처리 주의
startEndNull(pageStart, pageEnd)이 true인 경우에만isOverview조건을 걸어주고, 하나라도 null 이 아니면page.between(...)로 전환됩니다.
pageStart==null && pageEnd!=null또는 그 반대 상황에서between호출 시 NPE 가 발생할 수 있으니, 두 값이 모두 non-null임을 보장하거나 개별 조건으로 분기하는 것이 안전합니다.src/main/java/konkuk/thip/record/adapter/out/persistence/repository/RecordQueryRepository.java (1)
9-9: 파라미터 과다: 조건 DTO로 캡슐화 권장
findRecordsByRoom의 파라미터가 7개입니다. 유지보수 및 확장성을 위해 SearchCondition DTO (또는 스펙 객체)로 묶어주세요.-public interface RecordQueryRepository { - Page<RecordSearchResponse.RecordSearchResult> findRecordsByRoom( - Long roomId, String viewType, Integer pageStart, Integer pageEnd, - Boolean isOverview, Long userId, Pageable pageable); +public interface RecordQueryRepository { + Page<RecordSearchResponse.RecordSearchResult> findRecordsByRoom( + RecordSearchCondition condition, Pageable pageable); }src/main/java/konkuk/thip/user/adapter/out/persistence/repository/following/FollowingQueryRepositoryImpl.java (1)
24-44: @OverRide 누락 및 카운트 타입 오버플로우 가능성
countByFollowingUserIds는 인터페이스 메서드 구현이므로@Override애노테이션을 추가해 컴파일-타임 검증을 받는 게 안전합니다.tuple.get(following.count()).intValue()는 팔로워 수가 2,147,483,647 명을 넘으면 오버플로우가 발생합니다.Long으로 유지하거나Math.toIntExact사용을 권장합니다.- // 주어진 userId 리스트에 대해 각 userId의 팔로워(구독자) 수를 집계하여 Map으로 반환 - public Map<Long, Integer> countByFollowingUserIds(List<Long> userIds) { + @Override + // 주어진 userId 리스트에 대해 각 userId의 팔로워(구독자) 수를 집계하여 Map으로 반환 + public Map<Long, Long> countByFollowingUserIds(List<Long> userIds) { ... - return results.stream() - .collect(Collectors.toMap( - tuple -> tuple.get(following.followingUserJpaEntity.userId), - tuple -> tuple.get(following.count()).intValue() - )); + return results.stream() + .collect(Collectors.toMap( + tuple -> tuple.get(following.followingUserJpaEntity.userId), + tuple -> tuple.get(following.count()) + )); }
🧹 Nitpick comments (26)
src/main/java/konkuk/thip/attendanceCheck/adapter/out/persistence/AttendanceCheckQueryPersistenceAdapter.java (1)
13-13: 필드 이름 일관성을 고려해보세요.Command 어댑터에서는
attendanceCheckRepository를 사용하는데, Query 어댑터에서는jpaRepository를 사용합니다. 일관성을 위해 동일한 이름을 사용하는 것을 권장합니다.-private final AttendanceCheckRepository jpaRepository; +private final AttendanceCheckRepository attendanceCheckRepository;src/main/java/konkuk/thip/book/adapter/in/web/response/GetBookSearchListResponse.java (1)
7-7: 외부 API Util 상수에 대한 직접 의존 제거 권장응답 DTO 계층이
adapter.out.api.naver.NaverApiUtil의PAGE_SIZE상수에 직접 의존하면서, 외부 어댑터 구현 변경 시 DTO까지 영향을 받는 레이어 침투가 발생합니다.
- 공용 상수를
common모듈이나 설정 클래스로 분리- 또는 서비스 계층에서 값(또는
Pageable)을 주입하도록 리팩터링을 고려해 주세요.
src/main/java/konkuk/thip/user/application/service/following/UserFollowService.java (1)
27-30: 불린 플래그 명확성 향상 제안
Boolean type변수는 “팔로우 / 언팔로우” 의미를 담기에 네이밍이 모호합니다.isFollow혹은follow등 의미가 분명한 이름으로 교체하면 가독성이 좋아집니다.- Boolean type = followCommand.type(); + Boolean follow = followCommand.type();src/main/java/konkuk/thip/user/application/service/following/UserGetFollowersService.java (1)
19-26: 페이지 크기 하드코딩 제거 고려
DEFAULT_PAGE_SIZE(10)를 상수로 고정하면 테스트는 편리하지만 운영 환경에서 요구사항이 바뀔 때 매번 코드 수정이 필요합니다.
application.yml설정값이나@Value주입으로 외부화하면 유연성이 높아집니다.src/main/java/konkuk/thip/user/adapter/out/persistence/repository/UserJpaRepository.java (1)
11-11:findById메서드 중복 선언 제거 권장
JpaRepository자체에 이미Optional<T> findById(ID id)가 정의되어 있어 동일 시그니처를 다시 선언할 필요가 없습니다. 중복 선언은 IDE-level 오버라이드 표시가 사라져 가독성이 떨어지고, 향후JpaRepository시그니처 변경 시 컴파일 오류 위험을 키웁니다.- Optional<UserJpaEntity> findById(Long userId);src/main/java/konkuk/thip/vote/adapter/out/persistence/repository/VoteItemJpaRepository.java (1)
8-11: 메서드 시그니처의 의도·이름 불일치
findAllByVoteJpaEntity_PostId(Long voteId)는 JPA 프로퍼티 경로가PostId임에도 파라미터 변수명이voteId라 혼동을 줄 수 있습니다.
엔티티 구조상VoteJpaEntity가Post를 상속한다면 실제로는 postId를 의미하므로, 변수명과 메서드명을 일관되게 맞추는 편이 가독성·유지보수에 유리합니다.- List<VoteItemJpaEntity> findAllByVoteJpaEntity_PostId(Long voteId); + List<VoteItemJpaEntity> findAllByVoteJpaEntity_PostId(Long postId);src/main/java/konkuk/thip/user/adapter/out/persistence/repository/AliasQueryRepositoryImpl.java (1)
24-35: 카테고리 N+1 가능성 점검
alias→category조인을 fetch join 없이 분리 조회하면, 이후 서비스 계층에서category프록시 접근 시 N+1 발생 여지가 있습니다. 현재 DTO 로 바로 매핑하고 있으므로 문제없을 수도 있으나, 추후 필드 추가 시 대비해leftJoin(...).fetchJoin()고려를 권장드립니다.src/main/java/konkuk/thip/record/adapter/out/persistence/repository/RecordQueryRepositoryImpl.java (1)
101-110: 카운트 쿼리 성능 개선 제안목록 조회 쿼리와 동일한 조인 구조로
count()를 수행하면 불필요한LEFT JOIN으로 성능 손실이 큽니다.
WHERE조건만 동일하게 유지한 채 단순post.count()를 수행하거나, 필요하다면 서브쿼리로 분리해 불필요한 조인을 제거하는 방안을 고려해 주세요.src/main/java/konkuk/thip/user/adapter/out/persistence/repository/following/FollowingJpaRepository.java (1)
7-8: @repository 중복 여부 검토Spring Boot 3.x 기준으로
JpaRepository인터페이스는 컴포넌트 스캔 대상이므로@Repository애노테이션이 없어도 빈으로 등록됩니다.
의도적으로 예외 변환(AOP) 등을 위해 선언하신 것이 아니라면 제거하여 간결성을 유지하는 편이 좋습니다.-@Repository -public interface FollowingJpaRepository extends JpaRepository<FollowingJpaEntity, Long>, FollowingQueryRepository { +public interface FollowingJpaRepository extends JpaRepository<FollowingJpaEntity, Long>, FollowingQueryRepository {src/main/java/konkuk/thip/user/adapter/out/persistence/repository/following/FollowingQueryRepositoryImpl.java (1)
60-80: Cursor 기반 페이지네이션: 인덱스 존재 여부 확인 필요
createdAt컬럼에 범위 조건과 정렬이 동시에 걸리므로(created_at)단일 인덱스가 없으면 성능 저하가 발생할 수 있습니다. DB 인덱스 상태를 점검해주세요.src/main/java/konkuk/thip/record/adapter/out/persistence/RecordQueryPersistenceAdapter.java (1)
17-20: 조회 어댑터에@Transactional(readOnly = true)적용을 고려해 주세요대부분의 Query Adapter 메서드는 읽기 전용 트랜잭션으로 동작하는 것이 성능-최적화(더티 체크 생략 등)에 유리합니다.
@Repository @RequiredArgsConstructor +@Transactional(readOnly = true) public class RecordQueryPersistenceAdapter implements RecordQueryPort {src/main/java/konkuk/thip/recentSearch/adapter/out/persistence/RecentSearchCommandPersistenceAdapter.java (1)
26-26: 파라미터 표기 스타일 통일쉼표 뒤에 공백이 빠져 있습니다. 사소하지만 팀 코딩 컨벤션 유지 차원에서 수정 권장합니다.
-public void save(Long userId,RecentSearch recentSearch) { +public void save(Long userId, RecentSearch recentSearch) {src/test/java/konkuk/thip/user/application/service/UserFollowServiceTest.java (1)
6-6: 패키지 경로 불일치로 인한 잠재적 혼란
UserFollowService가following하위 패키지로 이동했지만, 테스트 클래스의 패키지 선언은 여전히konkuk.thip.user.application.service에 머물러 있습니다. 테스트 소스와 실제 소스의 패키지 계층을 맞춰 두면 추후 리팩터링·검색 시 혼동을 줄일 수 있으니, 필요 시 테스트 패키지를...service.following으로 이동하는 방안을 고려해 주세요.src/main/java/konkuk/thip/vote/domain/VoteParticipant.java (1)
9-16: 도메인 엔티티 리네이밍 완료 – equals/hashCode 구현 여부 검토
VoteParticipant로의 리네이밍 자체는 이상 없습니다. 다만 식별자가 명확히 존재하므로 컬렉션 사용 또는 테스트 시 동등성 비교가 필요하면equals/hashCode를 명시적으로 구현해 두는 편이 안전합니다.src/main/java/konkuk/thip/saved/adapter/out/persistence/SavedQueryPersistenceAdapter.java (1)
27-32: 사용되지 않는 의존성 주입 필드 정리 제안
savedFeedJpaRepository,savedBookMapper,savedFeedMapper필드는 현재 클래스에서 참조되지 않습니다. 남겨두면 경고가 발생하고 유지보수성이 저하됩니다. 필요 없다면 제거하거나, 앞으로 사용할 계획이라면 TODO 주석을 남겨 의도를 명확히 해주세요.- private final SavedBookMapper savedBookMapper; ... - private final SavedFeedMapper savedFeedMapper;src/test/java/konkuk/thip/record/adapter/in/web/RecordQueryControllerTest.java (1)
1-2: 파일명-클래스명 불일치
파일명은RecordQueryControllerTest이지만 클래스명은RecordSearchControllerTest입니다. 리팩터 과정에서 어긋난 것으로 보이니 둘 중 하나를 통일하는 편이 가독성과 검색성을 높입니다.src/main/java/konkuk/thip/room/domain/Room.java (1)
64-64: memberCount 업데이트 메서드 추가를 고려해보세요.초기값 설정은 적절하지만, 방 참가자가 증가하거나 감소할 때
memberCount를 업데이트하는 도메인 메서드가 없습니다. 참가자 관리 로직과 함께incrementMemberCount(),decrementMemberCount()같은 메서드를 추가하는 것을 고려해보세요.+public void incrementMemberCount() { + this.memberCount++; +} + +public void decrementMemberCount() { + if (this.memberCount > 0) { + this.memberCount--; + } +}src/test/java/konkuk/thip/room/domain/RoomParticipantTest.java (1)
8-8: @DisplayName을 업데이트해야 합니다.클래스명이
RoomParticipantTest로 변경되었으므로, @DisplayName도 "RoomParticipant 도메인 테스트"로 업데이트해야 합니다.-@DisplayName("[단위] UserRoom 도메인 테스트") +@DisplayName("[단위] RoomParticipant 도메인 테스트")src/main/java/konkuk/thip/user/adapter/out/persistence/repository/UserQueryRepositoryImpl.java (1)
20-20: 변수명을 더 명확하게 개선하는 것을 고려해보세요.변수명이 여전히
userRoom으로 되어 있는데, 도메인 모델이 RoomParticipant로 변경되었으므로roomParticipant로 변경하는 것이 더 명확할 것 같습니다.-QRoomParticipantJpaEntity userRoom = QRoomParticipantJpaEntity.roomParticipantJpaEntity; +QRoomParticipantJpaEntity roomParticipant = QRoomParticipantJpaEntity.roomParticipantJpaEntity;그리고 하단의 쿼리에서도 해당 변수를 사용하는 부분들을 함께 업데이트해야 합니다.
src/main/java/konkuk/thip/room/application/service/RoomGetMemberListService.java (1)
35-35: 주석을 업데이트해주세요.주석에서 "방 참여자(UserRoom)"를 "방 참여자(RoomParticipant)"로 수정해야 합니다.
- // 2. 방 참여자(UserRoom) 전체 조회 + // 2. 방 참여자(RoomParticipant) 전체 조회src/main/java/konkuk/thip/vote/adapter/out/persistence/repository/VoteParticipantJpaRepository.java (1)
6-8: Repository 인터페이스가 올바르게 구현되었습니다.VoteParticipantJpaEntity에 대한 JPA Repository 인터페이스가 정확하게 정의되었습니다. 다만 메서드명이 상당히 길어 가독성 개선을 고려해볼 수 있습니다.
메서드명을 더 간결하게 만들기 위해 @query 어노테이션을 사용하는 것을 고려해보세요:
- boolean existsByUserJpaEntity_UserIdAndVoteItemJpaEntity_VoteItemId(Long userId, Long voteItemId); + @Query("SELECT COUNT(vp) > 0 FROM VoteParticipantJpaEntity vp WHERE vp.userJpaEntity.userId = :userId AND vp.voteItemJpaEntity.voteItemId = :voteItemId") + boolean existsByUserIdAndVoteItemId(@Param("userId") Long userId, @Param("voteItemId") Long voteItemId);src/test/java/konkuk/thip/room/domain/RoomParticipantsTest.java (1)
14-14: 헬퍼 메서드명 개선을 고려해보세요.메서드명이
createUserRoom으로 되어 있지만 실제로는RoomParticipant를 생성합니다. 도메인 모델의 명확성을 위해createRoomParticipant로 변경하는 것을 고려해보세요.-private RoomParticipant createUserRoom(Long id, Long userId, Long roomId, RoomParticipantRole role) { +private RoomParticipant createRoomParticipant(Long id, Long userId, Long roomId, RoomParticipantRole role) {그리고 이 메서드를 사용하는 모든 곳에서도 메서드명을 업데이트해야 합니다.
src/test/java/konkuk/thip/record/adapter/in/web/RecordCreateControllerTest.java (1)
96-96: 주석 개선 제안코드는
RoomParticipantJpaEntity를 생성하고 있지만 주석에서는 여전히UserRoomJpaEntity라고 표기되어 있습니다.- //UserRoomJpaEntity 생성 및 저장 + //RoomParticipantJpaEntity 생성 및 저장src/test/java/konkuk/thip/common/util/TestEntityFactory.java (1)
103-103: 메서드명 변경을 고려해보세요.메서드가
RoomParticipantJpaEntity를 반환하므로createRoomParticipant또는createParticipant로 메서드명을 변경하는 것이 더 적절할 수 있습니다.- public static RoomParticipantJpaEntity createUserRoom(RoomJpaEntity room, UserJpaEntity user, RoomParticipantRole roomParticipantRole, double userPercentage) { + public static RoomParticipantJpaEntity createRoomParticipant(RoomJpaEntity room, UserJpaEntity user, RoomParticipantRole roomParticipantRole, double userPercentage) {src/main/java/konkuk/thip/room/domain/RoomParticipants.java (1)
15-17: 주석 업데이트가 필요합니다.클래스 주석에서 여전히 "UserRoom"을 언급하고 있지만, 실제로는
RoomParticipant를 다루고 있습니다./** - * 특정 Room 과 연관된 UserRoom 들을 모은 일급 컬렉션 + * 특정 Room 과 연관된 RoomParticipant 들을 모은 일급 컬렉션 */src/main/java/konkuk/thip/vote/adapter/out/mapper/VoteParticipantMapper.java (1)
11-16: 매퍼 메서드 시그니처의 일관성을 개선하는 것을 고려해보세요.
toJpaEntity메서드가 도메인 엔티티를 파라미터로 받지 않고 직접 JPA 엔티티들을 받는 것은 다른 매퍼 클래스들과 일관성이 떨어집니다. RoomParticipantMapper의 패턴을 따르는 것을 권장합니다.다음과 같은 시그니처로 변경을 고려해보세요:
-public VoteParticipantJpaEntity toJpaEntity(UserJpaEntity userJpaEntity, VoteItemJpaEntity voteItemJpaEntity) { +public VoteParticipantJpaEntity toJpaEntity(VoteParticipant voteParticipant, UserJpaEntity userJpaEntity, VoteItemJpaEntity voteItemJpaEntity) {
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (112)
src/main/java/konkuk/thip/attendanceCheck/adapter/out/persistence/AttendanceCheckCommandPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/attendanceCheck/adapter/out/persistence/AttendanceCheckQueryPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/attendanceCheck/adapter/out/persistence/repository/AttendanceCheckRepository.java(1 hunks)src/main/java/konkuk/thip/book/adapter/in/web/response/GetBookSearchListResponse.java(1 hunks)src/main/java/konkuk/thip/book/adapter/out/api/CompositeBookApiAdapter.java(1 hunks)src/main/java/konkuk/thip/book/adapter/out/api/naver/NaverApiClient.java(1 hunks)src/main/java/konkuk/thip/book/adapter/out/api/naver/NaverApiUtil.java(1 hunks)src/main/java/konkuk/thip/book/adapter/out/api/naver/NaverBookXmlParser.java(1 hunks)src/main/java/konkuk/thip/book/adapter/out/persistence/BookCommandPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/book/adapter/out/persistence/BookQueryPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/book/adapter/out/persistence/repository/BookJpaRepository.java(1 hunks)src/main/java/konkuk/thip/book/application/service/BookSearchService.java(1 hunks)src/main/java/konkuk/thip/comment/adapter/out/persistence/CommentQueryPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/comment/adapter/out/persistence/repository/CommentJpaRepository.java(1 hunks)src/main/java/konkuk/thip/common/security/oauth2/CustomOAuth2UserService.java(1 hunks)src/main/java/konkuk/thip/notification/adapter/out/persistence/NotificationCommandPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/notification/adapter/out/persistence/NotificationQueryPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/notification/adapter/out/persistence/repository/NotificationJpaRepository.java(1 hunks)src/main/java/konkuk/thip/recentSearch/adapter/out/persistence/RecentSearchCommandPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/recentSearch/adapter/out/persistence/RecentSearchQueryPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/recentSearch/adapter/out/persistence/repository/RecentSearchJpaRepository.java(1 hunks)src/main/java/konkuk/thip/record/adapter/out/persistence/RecordCommandPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/record/adapter/out/persistence/RecordQueryPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/record/adapter/out/persistence/repository/RecordJpaRepository.java(1 hunks)src/main/java/konkuk/thip/record/adapter/out/persistence/repository/RecordQueryRepository.java(1 hunks)src/main/java/konkuk/thip/record/adapter/out/persistence/repository/RecordQueryRepositoryImpl.java(1 hunks)src/main/java/konkuk/thip/record/application/service/RecordCreateService.java(2 hunks)src/main/java/konkuk/thip/room/adapter/out/jpa/RoomJpaEntity.java(1 hunks)src/main/java/konkuk/thip/room/adapter/out/jpa/RoomParticipantJpaEntity.java(2 hunks)src/main/java/konkuk/thip/room/adapter/out/jpa/RoomParticipantRole.java(1 hunks)src/main/java/konkuk/thip/room/adapter/out/mapper/RoomMapper.java(2 hunks)src/main/java/konkuk/thip/room/adapter/out/mapper/RoomParticipantMapper.java(1 hunks)src/main/java/konkuk/thip/room/adapter/out/persistence/RoomCommandPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/room/adapter/out/persistence/RoomParticipantCommandPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/room/adapter/out/persistence/RoomQueryPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/room/adapter/out/persistence/repository/CategoryJpaRepository.java(1 hunks)src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomJpaRepository.java(1 hunks)src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomParticipantJpaRepository.java(1 hunks)src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomQueryRepository.java(1 hunks)src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomQueryRepositoryImpl.java(6 hunks)src/main/java/konkuk/thip/room/application/service/RoomGetMemberListService.java(2 hunks)src/main/java/konkuk/thip/room/application/service/RoomShowPlayingDetailViewService.java(2 hunks)src/main/java/konkuk/thip/room/application/service/RoomShowRecruitingDetailViewService.java(2 hunks)src/main/java/konkuk/thip/room/domain/Room.java(2 hunks)src/main/java/konkuk/thip/room/domain/RoomParticipant.java(1 hunks)src/main/java/konkuk/thip/room/domain/RoomParticipants.java(3 hunks)src/main/java/konkuk/thip/saved/adapter/out/persistence/SavedCommandPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/saved/adapter/out/persistence/SavedQueryPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/saved/adapter/out/persistence/repository/SavedBookJpaRepository.java(1 hunks)src/main/java/konkuk/thip/saved/adapter/out/persistence/repository/SavedFeedJpaRepository.java(1 hunks)src/main/java/konkuk/thip/user/adapter/out/jpa/UserRoomRole.java(0 hunks)src/main/java/konkuk/thip/user/adapter/out/mapper/UserRoomMapper.java(0 hunks)src/main/java/konkuk/thip/user/adapter/out/persistence/FollowingCommandPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/user/adapter/out/persistence/FollowingQueryPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/user/adapter/out/persistence/UserCommandPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/user/adapter/out/persistence/UserQueryPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/user/adapter/out/persistence/UserRoomCommandPersistenceAdapter.java(0 hunks)src/main/java/konkuk/thip/user/adapter/out/persistence/UserRoomJpaRepository.java(0 hunks)src/main/java/konkuk/thip/user/adapter/out/persistence/repository/AliasJpaRepository.java(1 hunks)src/main/java/konkuk/thip/user/adapter/out/persistence/repository/AliasQueryRepository.java(1 hunks)src/main/java/konkuk/thip/user/adapter/out/persistence/repository/AliasQueryRepositoryImpl.java(1 hunks)src/main/java/konkuk/thip/user/adapter/out/persistence/repository/UserJpaRepository.java(1 hunks)src/main/java/konkuk/thip/user/adapter/out/persistence/repository/UserQueryRepository.java(1 hunks)src/main/java/konkuk/thip/user/adapter/out/persistence/repository/UserQueryRepositoryImpl.java(2 hunks)src/main/java/konkuk/thip/user/adapter/out/persistence/repository/following/FollowingJpaRepository.java(1 hunks)src/main/java/konkuk/thip/user/adapter/out/persistence/repository/following/FollowingQueryRepository.java(1 hunks)src/main/java/konkuk/thip/user/adapter/out/persistence/repository/following/FollowingQueryRepositoryImpl.java(1 hunks)src/main/java/konkuk/thip/user/application/port/out/UserRoomCommandPort.java(1 hunks)src/main/java/konkuk/thip/user/application/service/following/UserFollowService.java(1 hunks)src/main/java/konkuk/thip/user/application/service/following/UserGetFollowersService.java(1 hunks)src/main/java/konkuk/thip/vote/adapter/out/jpa/VoteParticipantJpaEntity.java(1 hunks)src/main/java/konkuk/thip/vote/adapter/out/mapper/UserVoteMapper.java(0 hunks)src/main/java/konkuk/thip/vote/adapter/out/mapper/VoteParticipantMapper.java(1 hunks)src/main/java/konkuk/thip/vote/adapter/out/persistence/UserVoteJpaRepository.java(0 hunks)src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteCommandPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteQueryPersistenceAdapter.java(2 hunks)src/main/java/konkuk/thip/vote/adapter/out/persistence/repository/VoteItemJpaRepository.java(1 hunks)src/main/java/konkuk/thip/vote/adapter/out/persistence/repository/VoteJpaRepository.java(1 hunks)src/main/java/konkuk/thip/vote/adapter/out/persistence/repository/VoteParticipantJpaRepository.java(1 hunks)src/main/java/konkuk/thip/vote/adapter/out/persistence/repository/VoteQueryRepository.java(1 hunks)src/main/java/konkuk/thip/vote/adapter/out/persistence/repository/VoteQueryRepositoryImpl.java(1 hunks)src/main/java/konkuk/thip/vote/domain/VoteParticipant.java(1 hunks)src/test/java/konkuk/thip/book/adapter/in/web/BookChangeSavedControllerTest.java(1 hunks)src/test/java/konkuk/thip/book/adapter/in/web/BookDetailSearchControllerTest.java(6 hunks)src/test/java/konkuk/thip/book/adapter/in/web/BookMostSearchedBooksControllerTest.java(1 hunks)src/test/java/konkuk/thip/book/adapter/in/web/BookQueryControllerTest.java(1 hunks)src/test/java/konkuk/thip/book/adapter/out/api/naver/NaverApiUtilTest.java(1 hunks)src/test/java/konkuk/thip/common/util/TestEntityFactory.java(2 hunks)src/test/java/konkuk/thip/feed/adapter/out/jpa/FeedJpaEntityTest.java(1 hunks)src/test/java/konkuk/thip/record/adapter/in/web/RecordCreateControllerTest.java(3 hunks)src/test/java/konkuk/thip/record/adapter/in/web/RecordQueryControllerTest.java(1 hunks)src/test/java/konkuk/thip/record/adapter/out/persistence/RecordQueryRepositoryImplTest.java(1 hunks)src/test/java/konkuk/thip/room/adapter/in/web/RoomCreateAPITest.java(1 hunks)src/test/java/konkuk/thip/room/adapter/in/web/RoomGetHomeJoinedRoomsApiTest.java(5 hunks)src/test/java/konkuk/thip/room/adapter/in/web/RoomGetMemberListApiTest.java(5 hunks)src/test/java/konkuk/thip/room/adapter/in/web/RoomPlayingDetailViewApiTest.java(9 hunks)src/test/java/konkuk/thip/room/adapter/in/web/RoomRecruitingDetailViewApiTest.java(7 hunks)src/test/java/konkuk/thip/room/adapter/in/web/RoomSearchApiTest.java(3 hunks)src/test/java/konkuk/thip/room/adapter/in/web/RoomVerifyPasswordAPITest.java(1 hunks)src/test/java/konkuk/thip/room/adapter/out/jpa/RecordJpaEntityTest.java(1 hunks)src/test/java/konkuk/thip/room/adapter/out/jpa/RoomJpaEntityTest.java(1 hunks)src/test/java/konkuk/thip/room/adapter/out/jpa/VoteJpaEntityTest.java(1 hunks)src/test/java/konkuk/thip/room/domain/RoomParticipantTest.java(5 hunks)src/test/java/konkuk/thip/room/domain/RoomParticipantsTest.java(9 hunks)src/test/java/konkuk/thip/user/adapter/in/web/UserFollowApiTest.java(1 hunks)src/test/java/konkuk/thip/user/adapter/in/web/UserGetFollowersApiTest.java(2 hunks)src/test/java/konkuk/thip/user/adapter/in/web/UserSignupControllerTest.java(1 hunks)src/test/java/konkuk/thip/user/adapter/in/web/UserVerifyNicknameControllerTest.java(1 hunks)src/test/java/konkuk/thip/user/adapter/in/web/UserViewAliasChoiceControllerTest.java(1 hunks)src/test/java/konkuk/thip/user/adapter/out/jpa/UserJpaEntityTest.java(1 hunks)src/test/java/konkuk/thip/user/application/service/UserFollowServiceTest.java(1 hunks)src/test/java/konkuk/thip/vote/adapter/in/web/VoteCreateControllerTest.java(1 hunks)
💤 Files with no reviewable changes (6)
- src/main/java/konkuk/thip/user/adapter/out/jpa/UserRoomRole.java
- src/main/java/konkuk/thip/user/adapter/out/mapper/UserRoomMapper.java
- src/main/java/konkuk/thip/vote/adapter/out/persistence/UserVoteJpaRepository.java
- src/main/java/konkuk/thip/user/adapter/out/persistence/UserRoomJpaRepository.java
- src/main/java/konkuk/thip/vote/adapter/out/mapper/UserVoteMapper.java
- src/main/java/konkuk/thip/user/adapter/out/persistence/UserRoomCommandPersistenceAdapter.java
🧰 Additional context used
🧠 Learnings (36)
📓 Common learnings
Learnt from: buzz0331
PR: THIP-TextHip/THIP-Server#75
File: src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteQueryRepositoryImpl.java:50-83
Timestamp: 2025-07-14T14:19:38.762Z
Learning: Vote와 VoteItem 엔티티는 자주 함께 사용되므로, N+1 문제를 방지하기 위해 양방향 매핑과 fetch join을 고려하는 것이 좋습니다. 특히 기록장 조회 API 등에서도 함께 사용될 가능성이 높습니다.
src/main/java/konkuk/thip/user/adapter/out/persistence/repository/UserQueryRepository.java (1)
Learnt from: buzz0331
PR: THIP-TextHip/THIP-Server#78
File: src/main/java/konkuk/thip/user/application/port/out/FollowingQueryPort.java:3-3
Timestamp: 2025-07-14T18:22:56.495Z
Learning: THIP 프로젝트에서는 Query API(조회 API)에 한해서는 application 계층에서 adapter.in.web.response 패키지의 response DTO를 직접 참조하는 것을 허용함. 이는 CQRS 아키텍처에서 읽기 전용 작업의 효율성을 위한 팀 컨벤션임.
src/main/java/konkuk/thip/user/adapter/out/persistence/repository/AliasQueryRepositoryImpl.java (1)
Learnt from: buzz0331
PR: THIP-TextHip/THIP-Server#78
File: src/main/java/konkuk/thip/user/application/port/out/FollowingQueryPort.java:3-3
Timestamp: 2025-07-14T18:22:56.495Z
Learning: THIP 프로젝트에서는 Query API(조회 API)에 한해서는 application 계층에서 adapter.in.web.response 패키지의 response DTO를 직접 참조하는 것을 허용함. 이는 CQRS 아키텍처에서 읽기 전용 작업의 효율성을 위한 팀 컨벤션임.
src/main/java/konkuk/thip/book/adapter/out/persistence/BookQueryPersistenceAdapter.java (1)
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#43
File: src/main/java/konkuk/thip/book/application/port/out/BookCommandPort.java:0-0
Timestamp: 2025-07-03T03:05:05.031Z
Learning: THIP 프로젝트에서는 CQRS Port 분리 시 다음 컨벤션을 따름: CommandPort에는 findByXXX를 통해 도메인 엔티티를 찾아오는 메서드를 추가하고, QueryPort에는 조회 API의 response에 해당하는 데이터들을 DB로부터 조회하는 메서드를 추가함.
src/main/java/konkuk/thip/vote/adapter/out/persistence/repository/VoteItemJpaRepository.java (1)
Learnt from: buzz0331
PR: THIP-TextHip/THIP-Server#75
File: src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteQueryRepositoryImpl.java:50-83
Timestamp: 2025-07-14T14:19:38.762Z
Learning: Vote와 VoteItem 엔티티는 자주 함께 사용되므로, N+1 문제를 방지하기 위해 양방향 매핑과 fetch join을 고려하는 것이 좋습니다. 특히 기록장 조회 API 등에서도 함께 사용될 가능성이 높습니다.
src/main/java/konkuk/thip/vote/adapter/out/persistence/repository/VoteJpaRepository.java (1)
Learnt from: buzz0331
PR: THIP-TextHip/THIP-Server#75
File: src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteQueryRepositoryImpl.java:50-83
Timestamp: 2025-07-14T14:19:38.762Z
Learning: Vote와 VoteItem 엔티티는 자주 함께 사용되므로, N+1 문제를 방지하기 위해 양방향 매핑과 fetch join을 고려하는 것이 좋습니다. 특히 기록장 조회 API 등에서도 함께 사용될 가능성이 높습니다.
src/main/java/konkuk/thip/vote/adapter/out/persistence/repository/VoteQueryRepository.java (1)
Learnt from: buzz0331
PR: THIP-TextHip/THIP-Server#75
File: src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteQueryRepositoryImpl.java:50-83
Timestamp: 2025-07-14T14:19:38.762Z
Learning: Vote와 VoteItem 엔티티는 자주 함께 사용되므로, N+1 문제를 방지하기 위해 양방향 매핑과 fetch join을 고려하는 것이 좋습니다. 특히 기록장 조회 API 등에서도 함께 사용될 가능성이 높습니다.
src/test/java/konkuk/thip/record/adapter/out/persistence/RecordQueryRepositoryImplTest.java (2)
Learnt from: buzz0331
PR: THIP-TextHip/THIP-Server#78
File: src/main/java/konkuk/thip/user/application/port/out/FollowingQueryPort.java:3-3
Timestamp: 2025-07-14T18:22:56.495Z
Learning: THIP 프로젝트에서는 Query API(조회 API)에 한해서는 application 계층에서 adapter.in.web.response 패키지의 response DTO를 직접 참조하는 것을 허용함. 이는 CQRS 아키텍처에서 읽기 전용 작업의 효율성을 위한 팀 컨벤션임.
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#43
File: src/main/java/konkuk/thip/book/application/port/out/BookCommandPort.java:0-0
Timestamp: 2025-07-03T03:05:05.031Z
Learning: THIP 프로젝트에서는 CQRS Port 분리 시 다음 컨벤션을 따름: CommandPort에는 findByXXX를 통해 도메인 엔티티를 찾아오는 메서드를 추가하고, QueryPort에는 조회 API의 response에 해당하는 데이터들을 DB로부터 조회하는 메서드를 추가함.
src/main/java/konkuk/thip/record/adapter/out/persistence/RecordQueryPersistenceAdapter.java (2)
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#43
File: src/main/java/konkuk/thip/book/application/port/out/BookCommandPort.java:0-0
Timestamp: 2025-07-03T03:05:05.031Z
Learning: THIP 프로젝트에서는 CQRS Port 분리 시 다음 컨벤션을 따름: CommandPort에는 findByXXX를 통해 도메인 엔티티를 찾아오는 메서드를 추가하고, QueryPort에는 조회 API의 response에 해당하는 데이터들을 DB로부터 조회하는 메서드를 추가함.
Learnt from: buzz0331
PR: THIP-TextHip/THIP-Server#78
File: src/main/java/konkuk/thip/user/application/port/out/FollowingQueryPort.java:3-3
Timestamp: 2025-07-14T18:22:56.495Z
Learning: THIP 프로젝트에서는 Query API(조회 API)에 한해서는 application 계층에서 adapter.in.web.response 패키지의 response DTO를 직접 참조하는 것을 허용함. 이는 CQRS 아키텍처에서 읽기 전용 작업의 효율성을 위한 팀 컨벤션임.
src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomQueryRepository.java (1)
Learnt from: buzz0331
PR: THIP-TextHip/THIP-Server#78
File: src/main/java/konkuk/thip/user/application/port/out/FollowingQueryPort.java:3-3
Timestamp: 2025-07-14T18:22:56.495Z
Learning: THIP 프로젝트에서는 Query API(조회 API)에 한해서는 application 계층에서 adapter.in.web.response 패키지의 response DTO를 직접 참조하는 것을 허용함. 이는 CQRS 아키텍처에서 읽기 전용 작업의 효율성을 위한 팀 컨벤션임.
src/main/java/konkuk/thip/record/adapter/out/persistence/RecordCommandPersistenceAdapter.java (1)
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#43
File: src/main/java/konkuk/thip/book/application/port/out/BookCommandPort.java:0-0
Timestamp: 2025-07-03T03:05:05.031Z
Learning: THIP 프로젝트에서는 CQRS Port 분리 시 다음 컨벤션을 따름: CommandPort에는 findByXXX를 통해 도메인 엔티티를 찾아오는 메서드를 추가하고, QueryPort에는 조회 API의 response에 해당하는 데이터들을 DB로부터 조회하는 메서드를 추가함.
src/main/java/konkuk/thip/record/adapter/out/persistence/repository/RecordQueryRepository.java (1)
Learnt from: buzz0331
PR: THIP-TextHip/THIP-Server#78
File: src/main/java/konkuk/thip/user/application/port/out/FollowingQueryPort.java:3-3
Timestamp: 2025-07-14T18:22:56.495Z
Learning: THIP 프로젝트에서는 Query API(조회 API)에 한해서는 application 계층에서 adapter.in.web.response 패키지의 response DTO를 직접 참조하는 것을 허용함. 이는 CQRS 아키텍처에서 읽기 전용 작업의 효율성을 위한 팀 컨벤션임.
src/main/java/konkuk/thip/recentSearch/adapter/out/persistence/RecentSearchCommandPersistenceAdapter.java (2)
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#43
File: src/main/java/konkuk/thip/book/application/port/out/BookCommandPort.java:0-0
Timestamp: 2025-07-03T03:05:05.031Z
Learning: THIP 프로젝트에서는 CQRS Port 분리 시 다음 컨벤션을 따름: CommandPort에는 findByXXX를 통해 도메인 엔티티를 찾아오는 메서드를 추가하고, QueryPort에는 조회 API의 response에 해당하는 데이터들을 DB로부터 조회하는 메서드를 추가함.
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#36
File: src/main/java/konkuk/thip/user/adapter/out/persistence/UserJpaRepository.java:7-7
Timestamp: 2025-06-29T09:47:31.299Z
Learning: Spring Data JPA에서 findBy{FieldName} 패턴의 메서드는 명시적 선언 없이 자동으로 생성되며, Optional<Entity> 반환 타입을 사용하는 것이 null 안전성을 위해 권장됩니다.
src/main/java/konkuk/thip/vote/domain/VoteParticipant.java (1)
Learnt from: buzz0331
PR: THIP-TextHip/THIP-Server#75
File: src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteQueryRepositoryImpl.java:50-83
Timestamp: 2025-07-14T14:19:38.762Z
Learning: Vote와 VoteItem 엔티티는 자주 함께 사용되므로, N+1 문제를 방지하기 위해 양방향 매핑과 fetch join을 고려하는 것이 좋습니다. 특히 기록장 조회 API 등에서도 함께 사용될 가능성이 높습니다.
src/test/java/konkuk/thip/room/adapter/in/web/RoomGetMemberListApiTest.java (1)
Learnt from: hd0rable
PR: THIP-TextHip/THIP-Server#57
File: src/test/java/konkuk/thip/room/domain/RoomTest.java:0-0
Timestamp: 2025-07-08T16:30:33.771Z
Learning: Room 도메인에서 startDate는 현재 날짜 이후여야 하는 도메인 규칙이 있어서, 테스트에서 만료된 상태를 시뮬레이션하려면 reflection을 사용해야 한다.
src/main/java/konkuk/thip/user/adapter/out/persistence/UserCommandPersistenceAdapter.java (1)
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#43
File: src/main/java/konkuk/thip/book/application/port/out/BookCommandPort.java:0-0
Timestamp: 2025-07-03T03:05:05.031Z
Learning: THIP 프로젝트에서는 CQRS Port 분리 시 다음 컨벤션을 따름: CommandPort에는 findByXXX를 통해 도메인 엔티티를 찾아오는 메서드를 추가하고, QueryPort에는 조회 API의 response에 해당하는 데이터들을 DB로부터 조회하는 메서드를 추가함.
src/main/java/konkuk/thip/room/adapter/out/persistence/RoomCommandPersistenceAdapter.java (1)
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#43
File: src/main/java/konkuk/thip/book/application/port/out/BookCommandPort.java:0-0
Timestamp: 2025-07-03T03:05:05.031Z
Learning: THIP 프로젝트에서는 CQRS Port 분리 시 다음 컨벤션을 따름: CommandPort에는 findByXXX를 통해 도메인 엔티티를 찾아오는 메서드를 추가하고, QueryPort에는 조회 API의 response에 해당하는 데이터들을 DB로부터 조회하는 메서드를 추가함.
src/main/java/konkuk/thip/room/application/service/RoomGetMemberListService.java (1)
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#43
File: src/main/java/konkuk/thip/book/application/port/out/BookCommandPort.java:0-0
Timestamp: 2025-07-03T03:05:05.031Z
Learning: THIP 프로젝트에서는 CQRS Port 분리 시 다음 컨벤션을 따름: CommandPort에는 findByXXX를 통해 도메인 엔티티를 찾아오는 메서드를 추가하고, QueryPort에는 조회 API의 response에 해당하는 데이터들을 DB로부터 조회하는 메서드를 추가함.
src/test/java/konkuk/thip/book/adapter/in/web/BookDetailSearchControllerTest.java (1)
Learnt from: hd0rable
PR: THIP-TextHip/THIP-Server#57
File: src/test/java/konkuk/thip/room/domain/RoomTest.java:0-0
Timestamp: 2025-07-08T16:30:33.771Z
Learning: Room 도메인에서 startDate는 현재 날짜 이후여야 하는 도메인 규칙이 있어서, 테스트에서 만료된 상태를 시뮬레이션하려면 reflection을 사용해야 한다.
src/main/java/konkuk/thip/room/application/service/RoomShowRecruitingDetailViewService.java (1)
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#43
File: src/main/java/konkuk/thip/book/application/port/out/BookCommandPort.java:0-0
Timestamp: 2025-07-03T03:05:05.031Z
Learning: THIP 프로젝트에서는 CQRS Port 분리 시 다음 컨벤션을 따름: CommandPort에는 findByXXX를 통해 도메인 엔티티를 찾아오는 메서드를 추가하고, QueryPort에는 조회 API의 response에 해당하는 데이터들을 DB로부터 조회하는 메서드를 추가함.
src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteCommandPersistenceAdapter.java (1)
Learnt from: buzz0331
PR: THIP-TextHip/THIP-Server#75
File: src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteQueryRepositoryImpl.java:50-83
Timestamp: 2025-07-14T14:19:38.762Z
Learning: Vote와 VoteItem 엔티티는 자주 함께 사용되므로, N+1 문제를 방지하기 위해 양방향 매핑과 fetch join을 고려하는 것이 좋습니다. 특히 기록장 조회 API 등에서도 함께 사용될 가능성이 높습니다.
src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteQueryPersistenceAdapter.java (1)
Learnt from: buzz0331
PR: THIP-TextHip/THIP-Server#75
File: src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteQueryRepositoryImpl.java:50-83
Timestamp: 2025-07-14T14:19:38.762Z
Learning: Vote와 VoteItem 엔티티는 자주 함께 사용되므로, N+1 문제를 방지하기 위해 양방향 매핑과 fetch join을 고려하는 것이 좋습니다. 특히 기록장 조회 API 등에서도 함께 사용될 가능성이 높습니다.
src/test/java/konkuk/thip/room/adapter/in/web/RoomPlayingDetailViewApiTest.java (2)
Learnt from: buzz0331
PR: THIP-TextHip/THIP-Server#75
File: src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteQueryRepositoryImpl.java:50-83
Timestamp: 2025-07-14T14:19:38.762Z
Learning: Vote와 VoteItem 엔티티는 자주 함께 사용되므로, N+1 문제를 방지하기 위해 양방향 매핑과 fetch join을 고려하는 것이 좋습니다. 특히 기록장 조회 API 등에서도 함께 사용될 가능성이 높습니다.
Learnt from: hd0rable
PR: THIP-TextHip/THIP-Server#57
File: src/test/java/konkuk/thip/room/domain/RoomTest.java:0-0
Timestamp: 2025-07-08T16:30:33.771Z
Learning: Room 도메인에서 startDate는 현재 날짜 이후여야 하는 도메인 규칙이 있어서, 테스트에서 만료된 상태를 시뮬레이션하려면 reflection을 사용해야 한다.
src/main/java/konkuk/thip/user/adapter/out/persistence/UserQueryPersistenceAdapter.java (1)
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#43
File: src/main/java/konkuk/thip/book/application/port/out/BookCommandPort.java:0-0
Timestamp: 2025-07-03T03:05:05.031Z
Learning: THIP 프로젝트에서는 CQRS Port 분리 시 다음 컨벤션을 따름: CommandPort에는 findByXXX를 통해 도메인 엔티티를 찾아오는 메서드를 추가하고, QueryPort에는 조회 API의 response에 해당하는 데이터들을 DB로부터 조회하는 메서드를 추가함.
src/main/java/konkuk/thip/room/application/service/RoomShowPlayingDetailViewService.java (2)
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#43
File: src/main/java/konkuk/thip/book/application/port/out/BookCommandPort.java:0-0
Timestamp: 2025-07-03T03:05:05.031Z
Learning: THIP 프로젝트에서는 CQRS Port 분리 시 다음 컨벤션을 따름: CommandPort에는 findByXXX를 통해 도메인 엔티티를 찾아오는 메서드를 추가하고, QueryPort에는 조회 API의 response에 해당하는 데이터들을 DB로부터 조회하는 메서드를 추가함.
Learnt from: buzz0331
PR: THIP-TextHip/THIP-Server#75
File: src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteQueryRepositoryImpl.java:50-83
Timestamp: 2025-07-14T14:19:38.762Z
Learning: Vote와 VoteItem 엔티티는 자주 함께 사용되므로, N+1 문제를 방지하기 위해 양방향 매핑과 fetch join을 고려하는 것이 좋습니다. 특히 기록장 조회 API 등에서도 함께 사용될 가능성이 높습니다.
src/test/java/konkuk/thip/room/adapter/in/web/RoomRecruitingDetailViewApiTest.java (1)
Learnt from: hd0rable
PR: THIP-TextHip/THIP-Server#57
File: src/test/java/konkuk/thip/room/domain/RoomTest.java:0-0
Timestamp: 2025-07-08T16:30:33.771Z
Learning: Room 도메인에서 startDate는 현재 날짜 이후여야 하는 도메인 규칙이 있어서, 테스트에서 만료된 상태를 시뮬레이션하려면 reflection을 사용해야 한다.
src/test/java/konkuk/thip/room/domain/RoomParticipantTest.java (1)
Learnt from: hd0rable
PR: THIP-TextHip/THIP-Server#57
File: src/test/java/konkuk/thip/room/domain/RoomTest.java:0-0
Timestamp: 2025-07-08T16:30:33.771Z
Learning: Room 도메인에서 startDate는 현재 날짜 이후여야 하는 도메인 규칙이 있어서, 테스트에서 만료된 상태를 시뮬레이션하려면 reflection을 사용해야 한다.
src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomParticipantJpaRepository.java (1)
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#43
File: src/main/java/konkuk/thip/book/application/port/out/BookCommandPort.java:0-0
Timestamp: 2025-07-03T03:05:05.031Z
Learning: THIP 프로젝트에서는 CQRS Port 분리 시 다음 컨벤션을 따름: CommandPort에는 findByXXX를 통해 도메인 엔티티를 찾아오는 메서드를 추가하고, QueryPort에는 조회 API의 response에 해당하는 데이터들을 DB로부터 조회하는 메서드를 추가함.
src/main/java/konkuk/thip/vote/adapter/out/mapper/VoteParticipantMapper.java (1)
Learnt from: buzz0331
PR: THIP-TextHip/THIP-Server#75
File: src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteQueryRepositoryImpl.java:50-83
Timestamp: 2025-07-14T14:19:38.762Z
Learning: Vote와 VoteItem 엔티티는 자주 함께 사용되므로, N+1 문제를 방지하기 위해 양방향 매핑과 fetch join을 고려하는 것이 좋습니다. 특히 기록장 조회 API 등에서도 함께 사용될 가능성이 높습니다.
src/main/java/konkuk/thip/vote/adapter/out/persistence/repository/VoteParticipantJpaRepository.java (1)
Learnt from: buzz0331
PR: THIP-TextHip/THIP-Server#75
File: src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteQueryRepositoryImpl.java:50-83
Timestamp: 2025-07-14T14:19:38.762Z
Learning: Vote와 VoteItem 엔티티는 자주 함께 사용되므로, N+1 문제를 방지하기 위해 양방향 매핑과 fetch join을 고려하는 것이 좋습니다. 특히 기록장 조회 API 등에서도 함께 사용될 가능성이 높습니다.
src/main/java/konkuk/thip/vote/adapter/out/jpa/VoteParticipantJpaEntity.java (1)
Learnt from: buzz0331
PR: THIP-TextHip/THIP-Server#75
File: src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteQueryRepositoryImpl.java:50-83
Timestamp: 2025-07-14T14:19:38.762Z
Learning: Vote와 VoteItem 엔티티는 자주 함께 사용되므로, N+1 문제를 방지하기 위해 양방향 매핑과 fetch join을 고려하는 것이 좋습니다. 특히 기록장 조회 API 등에서도 함께 사용될 가능성이 높습니다.
src/test/java/konkuk/thip/record/adapter/in/web/RecordCreateControllerTest.java (1)
Learnt from: hd0rable
PR: THIP-TextHip/THIP-Server#57
File: src/test/java/konkuk/thip/room/domain/RoomTest.java:0-0
Timestamp: 2025-07-08T16:30:33.771Z
Learning: Room 도메인에서 startDate는 현재 날짜 이후여야 하는 도메인 규칙이 있어서, 테스트에서 만료된 상태를 시뮬레이션하려면 reflection을 사용해야 한다.
src/main/java/konkuk/thip/room/adapter/out/persistence/RoomParticipantCommandPersistenceAdapter.java (1)
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#43
File: src/main/java/konkuk/thip/book/application/port/out/BookCommandPort.java:0-0
Timestamp: 2025-07-03T03:05:05.031Z
Learning: THIP 프로젝트에서는 CQRS Port 분리 시 다음 컨벤션을 따름: CommandPort에는 findByXXX를 통해 도메인 엔티티를 찾아오는 메서드를 추가하고, QueryPort에는 조회 API의 response에 해당하는 데이터들을 DB로부터 조회하는 메서드를 추가함.
src/main/java/konkuk/thip/user/application/port/out/UserRoomCommandPort.java (1)
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#43
File: src/main/java/konkuk/thip/book/application/port/out/BookCommandPort.java:0-0
Timestamp: 2025-07-03T03:05:05.031Z
Learning: THIP 프로젝트에서는 CQRS Port 분리 시 다음 컨벤션을 따름: CommandPort에는 findByXXX를 통해 도메인 엔티티를 찾아오는 메서드를 추가하고, QueryPort에는 조회 API의 response에 해당하는 데이터들을 DB로부터 조회하는 메서드를 추가함.
src/main/java/konkuk/thip/record/application/service/RecordCreateService.java (1)
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#43
File: src/main/java/konkuk/thip/book/application/port/out/BookCommandPort.java:0-0
Timestamp: 2025-07-03T03:05:05.031Z
Learning: THIP 프로젝트에서는 CQRS Port 분리 시 다음 컨벤션을 따름: CommandPort에는 findByXXX를 통해 도메인 엔티티를 찾아오는 메서드를 추가하고, QueryPort에는 조회 API의 response에 해당하는 데이터들을 DB로부터 조회하는 메서드를 추가함.
src/main/java/konkuk/thip/book/adapter/out/persistence/BookCommandPersistenceAdapter.java (1)
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#43
File: src/main/java/konkuk/thip/book/application/port/out/BookCommandPort.java:0-0
Timestamp: 2025-07-03T03:05:05.031Z
Learning: THIP 프로젝트에서는 CQRS Port 분리 시 다음 컨벤션을 따름: CommandPort에는 findByXXX를 통해 도메인 엔티티를 찾아오는 메서드를 추가하고, QueryPort에는 조회 API의 response에 해당하는 데이터들을 DB로부터 조회하는 메서드를 추가함.
🧬 Code Graph Analysis (17)
src/test/java/konkuk/thip/room/adapter/out/jpa/VoteJpaEntityTest.java (1)
src/test/java/konkuk/thip/common/util/TestEntityFactory.java (1)
TestEntityFactory(16-147)
src/test/java/konkuk/thip/room/adapter/in/web/RoomCreateAPITest.java (1)
src/test/java/konkuk/thip/common/util/TestEntityFactory.java (1)
TestEntityFactory(16-147)
src/test/java/konkuk/thip/book/adapter/in/web/BookChangeSavedControllerTest.java (1)
src/test/java/konkuk/thip/common/util/TestEntityFactory.java (1)
TestEntityFactory(16-147)
src/test/java/konkuk/thip/room/adapter/in/web/RoomGetMemberListApiTest.java (1)
src/test/java/konkuk/thip/common/util/TestEntityFactory.java (1)
TestEntityFactory(16-147)
src/test/java/konkuk/thip/room/adapter/out/jpa/RecordJpaEntityTest.java (1)
src/test/java/konkuk/thip/common/util/TestEntityFactory.java (1)
TestEntityFactory(16-147)
src/test/java/konkuk/thip/feed/adapter/out/jpa/FeedJpaEntityTest.java (1)
src/test/java/konkuk/thip/common/util/TestEntityFactory.java (1)
TestEntityFactory(16-147)
src/main/java/konkuk/thip/room/domain/RoomParticipant.java (1)
src/main/java/konkuk/thip/room/domain/RoomParticipants.java (1)
Getter(12-55)
src/main/java/konkuk/thip/room/adapter/out/persistence/RoomCommandPersistenceAdapter.java (1)
src/main/java/konkuk/thip/common/exception/EntityNotFoundException.java (1)
EntityNotFoundException(5-10)
src/main/java/konkuk/thip/saved/adapter/out/persistence/SavedCommandPersistenceAdapter.java (1)
src/main/java/konkuk/thip/common/exception/EntityNotFoundException.java (1)
EntityNotFoundException(5-10)
src/test/java/konkuk/thip/book/adapter/in/web/BookDetailSearchControllerTest.java (1)
src/test/java/konkuk/thip/common/util/TestEntityFactory.java (1)
TestEntityFactory(16-147)
src/test/java/konkuk/thip/room/adapter/in/web/RoomVerifyPasswordAPITest.java (1)
src/test/java/konkuk/thip/common/util/TestEntityFactory.java (1)
TestEntityFactory(16-147)
src/test/java/konkuk/thip/room/adapter/in/web/RoomSearchApiTest.java (1)
src/test/java/konkuk/thip/common/util/TestEntityFactory.java (1)
TestEntityFactory(16-147)
src/main/java/konkuk/thip/room/adapter/out/jpa/RoomParticipantRole.java (2)
src/main/java/konkuk/thip/room/domain/RoomParticipants.java (1)
Getter(12-55)src/main/java/konkuk/thip/room/domain/RoomParticipant.java (1)
Getter(7-37)
src/main/java/konkuk/thip/vote/adapter/out/jpa/VoteParticipantJpaEntity.java (1)
src/main/java/konkuk/thip/vote/domain/VoteParticipant.java (1)
Getter(7-16)
src/test/java/konkuk/thip/record/adapter/in/web/RecordCreateControllerTest.java (1)
src/test/java/konkuk/thip/common/util/TestEntityFactory.java (1)
TestEntityFactory(16-147)
src/test/java/konkuk/thip/room/adapter/in/web/RoomGetHomeJoinedRoomsApiTest.java (1)
src/test/java/konkuk/thip/common/util/TestEntityFactory.java (1)
TestEntityFactory(16-147)
src/main/java/konkuk/thip/book/adapter/out/persistence/BookCommandPersistenceAdapter.java (1)
src/main/java/konkuk/thip/common/exception/EntityNotFoundException.java (1)
EntityNotFoundException(5-10)
🔇 Additional comments (118)
src/main/java/konkuk/thip/attendanceCheck/adapter/out/persistence/repository/AttendanceCheckRepository.java (1)
1-1: 패키지 구조 정리가 올바르게 적용되었습니다.저장소 인터페이스를
.repository하위 패키지로 이동하는 것이 PR 목표와 일치하며, 코드 구조가 더 명확해졌습니다.src/main/java/konkuk/thip/attendanceCheck/adapter/out/persistence/AttendanceCheckCommandPersistenceAdapter.java (2)
4-4: 저장소 임포트가 올바르게 추가되었습니다.새로운 패키지 구조에 맞춰
AttendanceCheckRepository임포트가 정확히 업데이트되었습니다.
13-13: 저장소 필드 추가가 적절합니다.
AttendanceCheckRepository의존성이 올바르게 주입되도록 설정되었습니다.src/main/java/konkuk/thip/attendanceCheck/adapter/out/persistence/AttendanceCheckQueryPersistenceAdapter.java (1)
4-4: 저장소 임포트가 올바르게 추가되었습니다.새로운 패키지 구조에 맞춰
AttendanceCheckRepository임포트가 정확히 업데이트되었습니다.src/main/java/konkuk/thip/notification/adapter/out/persistence/repository/NotificationJpaRepository.java (1)
1-1: 패키지 이동 적절 👍
repository서브패키지로의 이동이 다른 모듈과 구조를 맞추어 가독성과 탐색성을 향상합니다. 별다른 문제 없습니다.src/main/java/konkuk/thip/notification/adapter/out/persistence/NotificationQueryPersistenceAdapter.java (1)
4-14: 필드 명칭 일관성 제안
NotificationCommandPersistenceAdapter에서는notificationJpaRepository라는 명확한 변수명을 사용하고 있습니다. 이 클래스의jpaRepository도 같은 스타일로 맞추면 가독성과 검색성이 좋아집니다.- private final NotificationJpaRepository jpaRepository; + private final NotificationJpaRepository notificationJpaRepository;[ suggest_nitpick ]
src/main/java/konkuk/thip/notification/adapter/out/persistence/NotificationCommandPersistenceAdapter.java (1)
4-14: 변경된 패키지 경로 import 확인 완료새로운
repository경로로의 import 추가가 필드 선언과 정확히 매칭됩니다. 불필요한 의존성이나 컴파일 오류 우려 없습니다.src/test/java/konkuk/thip/room/adapter/out/jpa/VoteJpaEntityTest.java (1)
5-14: 패키지 경로 확인 필요리포지토리 클래스들의 패키지 경로가
adapter.out.persistence.repository로 변경되었는데, 실제 리팩터 결과와 일치하는지 한번 더 확인해주세요.
특히 CI 환경에서 컴파일 오류가 발생하기 쉬우므로, 각 인터페이스가 해당 경로로 이동되었는지 검증이 필요합니다.
mvn test혹은./gradlew test로 빠르게 확인해보시면 좋겠습니다.src/main/java/konkuk/thip/comment/adapter/out/persistence/repository/CommentJpaRepository.java (1)
6-8: 엔티티 프로퍼티 경로 확인 완료
검증 결과:
CommentJpaEntity에private PostJpaEntity postJpaEntity;필드가 존재합니다.PostJpaEntity에private Long postId;필드가 존재합니다.따라서
countByPostJpaEntity_PostId메서드 네이밍은 올바르게 설정되어 있습니다.src/main/java/konkuk/thip/book/adapter/out/api/naver/NaverApiClient.java (1)
1-1: 패키지 이동 확인 완료패키지 경로 변경이 일관성 있게 반영되었습니다.
@Component가 스캔되는 기본 패키지(konkuk.thip..) 범위를 그대로 유지한다면 추가 설정 없이 정상 동작할 것으로 보입니다.src/main/java/konkuk/thip/book/adapter/out/api/naver/NaverApiUtil.java (1)
1-1: 패키지 이동 확인모든 참조(import)도 함께 업데이트된 것으로 보입니다. 별다른 문제를 발견하지 못했습니다.
src/test/java/konkuk/thip/book/adapter/out/api/naver/NaverApiUtilTest.java (1)
1-1: 테스트 클래스 패키지 경로 수정 확인테스트 코드 역시 새 패키지로 이동되어, 빌드 및 실행 시 패키지 불일치 문제가 발생하지 않을 것으로 보입니다.
src/main/java/konkuk/thip/book/adapter/out/api/naver/NaverBookXmlParser.java (1)
1-1: 패키지 이동 검토 완료관련 Naver API 구성요소가 동일한
naver서브패키지로 통합되어 모듈 구조가 더 명확해졌습니다.src/main/java/konkuk/thip/book/adapter/out/api/CompositeBookApiAdapter.java (1)
6-6: NaverApiClient import 추가로 필드 주입 정상화
NaverApiClient를 이미 필드로 사용하고 있었으나 import가 누락되어 있었습니다. 이번 추가로 컴파일 오류가 해결되므로 변경 사항은 적절합니다.src/main/java/konkuk/thip/book/application/service/BookSearchService.java (1)
29-29: PAGE_SIZE static import 경로 확인 완료리포지토리 전체를 검색한 결과,
adapter.out.api.NaverApiUtil.PAGE_SIZE를 참조하는 구(舊) 경로가 더 이상 존재하지 않습니다.
모든 파일에서 최신 경로(konkuk.thip.book.adapter.out.api.naver.NaverApiUtil.PAGE_SIZE)로 일관되게 적용되어 있습니다.src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomJpaRepository.java (1)
1-8: RoomQueryRepository 임포트 위치 확인 필요
RoomJpaRepository가RoomQueryRepository를 확장하고 있는데, 현재 파일에 별도의import문이 없습니다.RoomQueryRepository가 동일 패키지(repository) 안에 있다면 문제없지만, 다른 위치로 이동되었다면 컴파일 오류가 발생합니다. 패키지 리팩터링 과정에서 함께 이동했는지 한 번 더 확인해 주세요.src/test/java/konkuk/thip/record/adapter/out/persistence/RecordQueryRepositoryImplTest.java (1)
9-9: 테스트 패키지 정리 반영 확인 완료신규 패키지 경로에 맞춰
RecordQueryRepositoryImpl임포트가 수정되었습니다. 테스트 실행에 필요한 빈이 정상 등록되는지만 CI에서 한 번 더 확인하면 될 것 같습니다.src/main/java/konkuk/thip/book/adapter/out/persistence/repository/BookJpaRepository.java (1)
1-1: 패키지 이동 확인
repository서브패키지로 이동이 잘 반영되었습니다. 별다른 문제 없어 보입니다.src/main/java/konkuk/thip/vote/adapter/out/persistence/repository/VoteJpaRepository.java (1)
1-8: 패키지 리팩터링 확인 완료패키지 이동 외에 로직 변화가 없으며,
VoteQueryRepository와의 다중 상속 구조도 문제 없습니다.src/main/java/konkuk/thip/user/adapter/out/persistence/repository/AliasJpaRepository.java (1)
1-11: 패키지 이동 정상 적용리포지토리 인터페이스 구성 및 커스텀 쿼리 메서드 정의가 적절합니다.
src/main/java/konkuk/thip/user/adapter/out/persistence/repository/UserQueryRepository.java (1)
1-7: 패키지 구조 재정비 확인인터페이스 자체 변경은 없고, 패키지 이동이 일관성 있게 반영되었습니다.
src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomQueryRepository.java (1)
1-1: 패키지 이동 방향성 👍
repository서브패키지로의 이동은 영속성 계층 구성에 일관성을 부여합니다. 다른 모듈과도 구조가 맞춰져 추후 가독성과 관리성이 좋아질 것으로 보입니다.src/main/java/konkuk/thip/record/adapter/out/persistence/repository/RecordJpaRepository.java (1)
1-1: 패키지 정리 적용 확인패키지 경로만 변경되었으며 JPA 설정과 제네릭 타입 모두 문제없습니다. 다른 Adapter/Service 클래스에서 새 경로로 임포트가 누락되지 않았는지만 한 번 더 빌드로 확인 부탁드립니다.
src/main/java/konkuk/thip/user/adapter/out/persistence/repository/AliasQueryRepository.java (1)
1-1: 패키지 구조 통일 👍리포지토리 전용 서브패키지로 이동 완료된 것 확인했습니다. 변화로 인한 컴파일 오류는 없을 것으로 보입니다.
src/main/java/konkuk/thip/saved/adapter/out/persistence/repository/SavedFeedJpaRepository.java (1)
1-1: 패키지 이동 확인정상적으로
repository하위로 이동되었습니다. 추가 로직 변경이 없으므로 LGTM입니다.src/main/java/konkuk/thip/room/adapter/out/persistence/repository/CategoryJpaRepository.java (1)
1-1: 구조 개선 반영패키지 이동 외 변화가 없고,
findByValue시그니처도 그대로 유지되어 문제없습니다.src/main/java/konkuk/thip/vote/adapter/out/persistence/repository/VoteQueryRepositoryImpl.java (1)
1-1: 패키지 이동 LGTM패키지를
...persistence.repository로 이동하여 계층 구분이 명확해졌습니다. 스프링 컴포넌트 스캔 패스가 기존과 같다면 추가 설정 없이 정상 주입될 것으로 보입니다.src/main/java/konkuk/thip/room/adapter/out/persistence/RoomQueryPersistenceAdapter.java (1)
7-8: 불필요한 직접 의존성 여부 확인
RoomQueryPersistenceAdapter가RoomJpaRepository에 직접 의존하도록 변경되었습니다. Query 전용 포트에서 Command 메서드를 호출하지 않도록, 리포지토리에서 제공하는 쿼리들이 CQRS 규칙에 부합하는지 한번 더 확인 부탁드립니다.src/main/java/konkuk/thip/record/adapter/out/persistence/repository/RecordQueryRepository.java (1)
1-1: 기존 패키지 경로 잔여 없음 확인
전역 검색 결과konkuk.thip.record.adapter.out.persistence.RecordQueryRepository로 남아 있는 import나 참조가 전혀 발견되지 않았습니다. 모든 참조가…persistence.repository…하위로 올바르게 이동된 상태입니다.src/main/java/konkuk/thip/user/adapter/out/persistence/repository/following/FollowingQueryRepository.java (1)
1-1: 패키지 경로 정상 반영 및 잔여 참조 없음 확인 완료
rg --line-number 'adapter\.out\.persistence\.FollowingQueryRepository'검색 결과 없음FollowingQueryRepository,FollowingQueryRepositoryImpl,FollowingJpaRepository모두
src/main/java/konkuk/thip/user/adapter/out/persistence/repository/following/하위에 위치- 동일 패키지 내 사용으로 별도
import문도 존재하지 않음추가 수정 불필요합니다.
src/main/java/konkuk/thip/saved/adapter/out/persistence/repository/SavedBookJpaRepository.java (1)
1-1: 패키지 리팩터링 적용 확인패키지 이동 자체는 문제없어 보입니다. 다른 모듈에서 해당 Repo 를 주입받는 부분의 import 경로도 함께 수정되었는지 검증 부탁드립니다.
src/main/java/konkuk/thip/record/adapter/out/persistence/RecordQueryPersistenceAdapter.java (1)
4-4: import 경로 수정 확인 완료
RecordJpaRepository의 패키지 이동을 정확히 반영했습니다.src/main/java/konkuk/thip/recentSearch/adapter/out/persistence/repository/RecentSearchJpaRepository.java (1)
1-1: repository 하위 패키지로 이동 완료패키지 구조 리팩터링이 일관성 있게 적용되었습니다.
src/main/java/konkuk/thip/recentSearch/adapter/out/persistence/RecentSearchCommandPersistenceAdapter.java (1)
6-11: import 경로 정리 확인
RecentSearchJpaRepository,UserJpaRepository모두 새로운repository패키지 경로를 사용하도록 수정되었습니다.src/test/java/konkuk/thip/user/adapter/in/web/UserVerifyNicknameControllerTest.java (1)
9-10: 테스트 코드 import 경로 업데이트 완료리팩터링된 패키지 구조와 일치합니다. 별다른 이슈 없습니다.
src/test/java/konkuk/thip/book/adapter/in/web/BookMostSearchedBooksControllerTest.java (1)
10-11: import 경로 업데이트 확인
AliasJpaRepository,UserJpaRepository의 위치 변경이 올바르게 반영되었습니다.src/main/java/konkuk/thip/common/security/oauth2/CustomOAuth2UserService.java (1)
5-5: 레거시 경로 미사용 확인 완료프로젝트 전반에서
konkuk.thip.user.adapter.out.persistence.UserJpaRepositoryimport가 더 이상 존재하지 않음을 확인했습니다. 추가 조치가 필요 없습니다.src/main/java/konkuk/thip/record/adapter/out/persistence/RecordCommandPersistenceAdapter.java (1)
5-11: 리포지토리 경로 정리는 일관성 있게 반영됨
RecordJpaRepository,RoomJpaRepository,UserJpaRepository모두 새로운repository서브패키지로 이동된 것이 잘 반영되었습니다. 추가 수정 사항 없이 컴파일될 것으로 보입니다.src/test/java/konkuk/thip/user/adapter/out/jpa/UserJpaEntityTest.java (1)
6-7: 테스트 코드 import 경로 업데이트 확인테스트에서도 변경된 패키지 경로가 올바르게 반영되었습니다. 테스트 실행 시 컴파일 이슈는 없을 것으로 예상됩니다.
src/test/java/konkuk/thip/user/adapter/in/web/UserSignupControllerTest.java (1)
10-11: 통합 테스트 import 경로 업데이트 확인
AliasJpaRepository,UserJpaRepositoryimport 경로 변경이 정상 적용되었습니다. 다른 테스트 파일에도 동일 패턴이 적용되었는지 한번 더 확인 부탁드립니다.src/test/java/konkuk/thip/book/adapter/in/web/BookQueryControllerTest.java (1)
8-13: 복수 리포지토리 경로 변경 정상 반영
RecentSearchJpaRepository,AliasJpaRepository,UserJpaRepository모두 새로운 위치로 수정되었습니다. 기능적 영향은 없을 것으로 판단됩니다.src/main/java/konkuk/thip/user/adapter/out/persistence/FollowingQueryPersistenceAdapter.java (1)
7-7: 새 패키지 경로 import 정상 적용 확인
FollowingJpaRepository경로가repository.following으로 교체된 부분 문제 없습니다. 기존 컴포넌트 스캔 범위(예:@SpringBootApplication(scanBasePackages = "konkuk.thip"))가 그대로라면 별도 설정 없이 빈 등록이 이루어질 것입니다.src/main/java/konkuk/thip/book/adapter/out/persistence/BookQueryPersistenceAdapter.java (1)
4-4: Import 경로 수정 확인 완료패키지 구조 변경에 맞춘
BookJpaRepository경로 수정이 적절합니다. 추가 조치 필요 없습니다.src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteCommandPersistenceAdapter.java (1)
6-14: 리포지토리 패키지 이동 후 빈 스캔 범위 확인 필요리포지토리들이
...adapter.out.persistence.repository하위로 이동되면서 import 경로가 변경되었습니다.
기존에@EnableJpaRepositories등으로 특정 패키지에 한정해서 스캔하고 있었다면, 새 경로가 포함되는지 한번 더 확인해 주세요. Spring Boot 기본 설정(루트 패키지 기준 재귀 스캔)을 사용 중이라면 문제 없을 것입니다.src/test/java/konkuk/thip/user/adapter/in/web/UserViewAliasChoiceControllerTest.java (1)
7-10: 패키지 경로 변경 적용 확인 완료
CategoryJpaRepository와AliasJpaRepository의 새 경로가 정상적으로 반영되었습니다. 테스트 클래스 내부 로직에도 추가 수정이 필요 없어 보입니다.src/test/java/konkuk/thip/room/adapter/out/jpa/RoomJpaEntityTest.java (1)
7-11: 경로 변경 적용 완료
새로운repository서브패키지 경로로의 수정이 잘 반영되었습니다. 테스트 로직에도 영향이 없음을 확인했습니다.src/test/java/konkuk/thip/room/adapter/out/jpa/RecordJpaEntityTest.java (1)
5-15: 경로 변경 적용 확인
모든 Repository import가 새로운 구조에 맞게 수정되었습니다. 추가적인 수정 사항은 없어 보입니다.src/test/java/konkuk/thip/book/adapter/in/web/BookChangeSavedControllerTest.java (1)
6-6: 패키지 구조 정리에 따른 import 경로 수정 승인Repository 인터페이스들이
.repository하위 패키지로 이동함에 따라 import 경로가 올바르게 수정되었습니다. 기능적 변경사항은 없으며 패키지 구조 정리 목적에 부합합니다.Also applies to: 11-11, 15-16
src/test/java/konkuk/thip/room/adapter/in/web/RoomVerifyPasswordAPITest.java (1)
5-5: 패키지 구조 정리에 따른 import 경로 수정 승인Repository 인터페이스들이
.repository하위 패키지로 이동함에 따라 import 경로가 올바르게 수정되었습니다. 모든 관련 repository들(BookJpaRepository,CategoryJpaRepository,AliasJpaRepository,UserJpaRepository,RoomJpaRepository)의 import가 일관되게 업데이트되었습니다.Also applies to: 9-9, 13-14, 16-16
src/main/java/konkuk/thip/saved/adapter/out/persistence/SavedCommandPersistenceAdapter.java (1)
4-4: 패키지 구조 정리에 따른 import 경로 수정 승인Repository 인터페이스들이
.repository하위 패키지로 이동함에 따라 import 경로가 올바르게 수정되었습니다. 어댑터의 비즈니스 로직은 그대로 유지되면서 패키지 구조만 개선되었습니다.Also applies to: 9-10, 13-13
src/test/java/konkuk/thip/room/adapter/in/web/RoomCreateAPITest.java (1)
6-6: 패키지 구조 정리에 따른 import 경로 수정 승인Repository 인터페이스들이
.repository하위 패키지로 이동함에 따라 import 경로가 올바르게 수정되었습니다. 통합 테스트의 모든 기능은 그대로 유지되면서 패키지 구조만 개선되었습니다.Also applies to: 10-11, 15-16
src/main/java/konkuk/thip/room/adapter/out/persistence/RoomCommandPersistenceAdapter.java (1)
4-4: 패키지 구조 정리에 따른 import 경로 수정 승인Repository 인터페이스들이
.repository하위 패키지로 이동함에 따라 import 경로가 올바르게 수정되었습니다. 어댑터의 비즈니스 로직은 그대로 유지되면서 패키지 구조만 개선되었습니다.Also applies to: 9-10
src/main/java/konkuk/thip/book/adapter/out/persistence/BookCommandPersistenceAdapter.java (1)
5-5: 패키지 구조 정리에 따른 import 경로 업데이트가 올바르게 적용되었습니다.Repository 인터페이스들이
repository서브패키지로 이동한 것에 맞춰 import 경로가 정확히 업데이트되었습니다.Also applies to: 9-9
src/test/java/konkuk/thip/vote/adapter/in/web/VoteCreateControllerTest.java (1)
6-6: Repository 패키지 구조 정리가 일관되게 적용되었습니다.모든 Repository 인터페이스의 import 경로가 새로운
repository서브패키지 구조에 맞게 올바르게 업데이트되었습니다.Also applies to: 9-10, 14-15, 19-20
src/test/java/konkuk/thip/feed/adapter/out/jpa/FeedJpaEntityTest.java (1)
5-5: Repository import 경로가 새로운 패키지 구조에 맞게 정확히 업데이트되었습니다.패키지 구조 정리에 따라 Repository 인터페이스들의 import 경로가 올바르게 변경되었습니다.
Also applies to: 10-11
src/main/java/konkuk/thip/recentSearch/adapter/out/persistence/RecentSearchQueryPersistenceAdapter.java (1)
4-4: Repository 의존성이 일관된 아키텍처 패턴으로 추가되었습니다.새로운 패키지 구조에 맞는 import 경로와 생성자 주입을 위한 private final 필드가 올바르게 추가되었습니다.
Also applies to: 13-13
src/main/java/konkuk/thip/room/adapter/out/mapper/RoomMapper.java (1)
23-23: memberCount 필드 매핑이 양방향으로 일관되게 추가되었습니다.도메인 엔티티와 JPA 엔티티 간의 변환에서 memberCount 필드가 올바르게 매핑되도록 구현되었습니다.
Also applies to: 40-40
src/main/java/konkuk/thip/room/domain/RoomParticipant.java (2)
1-1: 패키지 이동이 적절하게 수행되었습니다.
UserRoom에서RoomParticipant로의 이름 변경과user.domain에서room.domain으로의 패키지 이동이 도메인 응집성을 높이는 좋은 리팩토링입니다.
17-17: 필드명 변경이 일관성 있게 적용되었습니다.
userRoomRole에서roomParticipantRole로의 필드명 변경이 클래스명 변경과 일치하여 일관성이 유지되었습니다.src/main/java/konkuk/thip/room/adapter/out/jpa/RoomJpaEntity.java (1)
47-49: memberCount 필드 추가가 적절하게 구현되었습니다.새로 생성된 방에 방장 1명으로 초기화하는 것이 비즈니스 로직에 맞으며,
@Builder.Default와nullable = false설정이 적절합니다.src/main/java/konkuk/thip/room/domain/Room.java (1)
41-41: memberCount 필드 추가가 적절합니다.도메인 엔티티에 멤버 수를 추적하는 필드를 추가한 것은 좋은 설계입니다.
src/main/java/konkuk/thip/user/adapter/out/persistence/UserQueryPersistenceAdapter.java (1)
4-5: 저장소 인터페이스 패키지 재구성이 적절하게 반영되었습니다.
repository서브패키지로의 이동이 일관성 있게 적용되어 코드 구조가 개선되었습니다.src/test/java/konkuk/thip/user/adapter/in/web/UserFollowApiTest.java (1)
9-11: 테스트 코드의 import 업데이트가 올바르게 수행되었습니다.저장소 인터페이스들의 새로운 패키지 위치가 정확히 반영되었으며, 특히
FollowingJpaRepository가following서브패키지로 이동된 것이 도메인 구조와 일치합니다.src/test/java/konkuk/thip/room/domain/RoomParticipantTest.java (1)
1-1: 리팩토링이 올바르게 적용되었습니다.UserRoom에서 RoomParticipant로의 도메인 이름 변경과 패키지 이동이 일관되게 적용되었습니다. 테스트 로직과 검증 로직도 정확하게 유지되었습니다.
Also applies to: 9-9, 15-15, 20-20, 30-30, 35-35, 45-45, 54-54, 58-60, 67-67, 76-76, 80-82
src/test/java/konkuk/thip/user/adapter/in/web/UserGetFollowersApiTest.java (1)
7-9: 패키지 구조 리팩토링이 올바르게 적용되었습니다.repository 인터페이스들이 persistence 하위의 repository 서브패키지로 올바르게 이동되었고, 클래스명도 더 명확하게 변경되었습니다.
Also applies to: 33-33
src/main/java/konkuk/thip/user/adapter/out/persistence/repository/UserQueryRepositoryImpl.java (1)
1-1: 패키지 구조와 도메인 모델 변경이 올바르게 적용되었습니다.QUserRoomJpaEntity에서 QRoomParticipantJpaEntity로의 변경이 올바르게 적용되었습니다.
Also applies to: 5-5
src/test/java/konkuk/thip/room/adapter/in/web/RoomGetMemberListApiTest.java (1)
4-4: 도메인 모델 리팩토링이 일관되게 적용되었습니다.UserRoom에서 RoomParticipant로의 변경사항이 모든 repository, enum, 그리고 사용처에 일관되게 적용되었습니다. 테스트 로직은 그대로 유지되면서 새로운 도메인 모델을 올바르게 사용하고 있습니다.
Also applies to: 8-16, 58-58, 85-87, 103-103, 179-179
src/main/java/konkuk/thip/room/application/service/RoomShowPlayingDetailViewService.java (1)
11-12: 도메인 모델 변경이 올바르게 적용되었습니다.UserRoom에서 RoomParticipant로의 도메인 모델 변경이 import문과 변수 타입에 일관되게 적용되었습니다. 서비스 로직은 그대로 유지되면서 새로운 도메인 모델을 올바르게 사용하고 있습니다.
Also applies to: 40-40
src/main/java/konkuk/thip/room/application/service/RoomGetMemberListService.java (3)
11-11: 도메인 모델 변경이 올바르게 적용되었습니다.UserRoom에서 RoomParticipant로의 리네이밍이 정확하게 반영되었습니다.
36-42: 도메인 모델 변경이 일관되게 적용되었습니다.RoomParticipant 타입 변경과 메서드 호출이 올바르게 수정되었습니다.
49-63: 스트림 처리 로직이 올바르게 업데이트되었습니다.변수 타입 변경이 정확하게 반영되어 있고, 기존 로직은 그대로 유지되어 있습니다.
src/main/java/konkuk/thip/user/adapter/out/persistence/UserCommandPersistenceAdapter.java (1)
7-8: 패키지 구조 정리가 올바르게 적용되었습니다.Repository 인터페이스들이 새로운 패키지 구조에 맞게 정확하게 임포트되었습니다.
src/test/java/konkuk/thip/book/adapter/in/web/BookDetailSearchControllerTest.java (4)
3-21: 임포트 문이 새로운 패키지 구조에 맞게 정확하게 업데이트되었습니다.Repository 인터페이스들과 JPA 엔티티들의 패키지 경로가 올바르게 변경되었습니다.
52-52: Repository 타입 변경이 올바르게 적용되었습니다.UserRoomJpaRepository에서 RoomParticipantJpaRepository로의 변경이 정확합니다.
103-109: 엔티티 생성 코드가 올바르게 업데이트되었습니다.RoomParticipantJpaEntity와 RoomParticipantRole 사용이 정확하게 반영되었습니다.
129-129: Repository 메서드 호출이 일관되게 업데이트되었습니다.테스트 정리(cleanup) 및 삭제 메서드들이 새로운 repository 타입에 맞게 정확하게 수정되었습니다.
Also applies to: 160-160, 189-189
src/main/java/konkuk/thip/user/adapter/out/persistence/FollowingCommandPersistenceAdapter.java (1)
7-8: Following 도메인의 패키지 구조가 올바르게 정리되었습니다.Following 관련 Repository가 following 서브패키지로 이동하고, UserJpaRepository는 상위 패키지에서 임포트하는 구조가 도메인 관계를 잘 반영하고 있습니다.
src/test/java/konkuk/thip/room/adapter/in/web/RoomPlayingDetailViewApiTest.java (4)
4-16: 리팩토링이 일관되게 적용되었습니다.import 구문들이 새로운 패키지 구조에 맞게 정확히 업데이트되었습니다.
UserRoomJpaEntity→RoomParticipantJpaEntity,UserRoomRole→RoomParticipantRole로의 변경이 올바르게 반영되었습니다.
67-67: Repository 변경이 올바르게 적용되었습니다.
UserRoomJpaRepository→RoomParticipantJpaRepository로의 변경이 정확합니다.
79-79: tearDown 메서드에서 Repository 참조가 올바르게 업데이트되었습니다.테스트 정리 로직에서 새로운 repository를 올바르게 사용하고 있습니다.
133-141: 엔티티 생성 로직이 새로운 도메인 모델에 맞게 업데이트되었습니다.
RoomParticipantJpaEntity생성과RoomParticipantRole사용이 올바르게 적용되었습니다.src/main/java/konkuk/thip/room/application/service/RoomShowRecruitingDetailViewService.java (3)
12-13: 도메인 모델 정렬이 올바르게 적용되었습니다.
RoomParticipant와RoomParticipants가room.domain패키지로 이동된 것이 import 구문에 정확히 반영되었습니다.
39-39: 변수 타입이 새로운 도메인 모델에 맞게 업데이트되었습니다.
List<UserRoom>에서List<RoomParticipant>로의 변경이 올바르게 적용되었습니다.
29-29: UserRoomCommandPort가 RoomParticipant 반환으로 올바르게 업데이트됨 확인됨UserRoomCommandPort 인터페이스에서
RoomParticipant findByUserIdAndRoomId(Long userId, Long roomId)List<RoomParticipant> findAllByRoomId(Long roomId)
메서드가 모두 RoomParticipant 타입을 반환하도록 선언되어 있어, 서비스에서 해당 포트를 사용해도 문제가 없습니다.src/test/java/konkuk/thip/room/adapter/in/web/RoomGetHomeJoinedRoomsApiTest.java (4)
8-14: import 구문이 새로운 패키지 구조에 맞게 올바르게 업데이트되었습니다.
RoomParticipantRole과RoomParticipantJpaRepository의 import가 정확히 적용되었습니다.
59-59: Repository 의존성이 올바르게 변경되었습니다.
RoomParticipantJpaRepository로의 변경이 정확합니다.
87-91: TestEntityFactory 사용이 올바르게 적용되었습니다.
TestEntityFactory.createUserRoom메서드 호출과RoomParticipantRole사용이 올바르게 적용되었습니다. 제공된 관련 코드 스니펫과 일치하는 사용법입니다.
96-96: tearDown 메서드에서 Repository 참조가 올바르게 업데이트되었습니다.새로운 repository를 사용하여 테스트 데이터를 정리하는 로직이 올바르게 적용되었습니다.
src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomQueryRepositoryImpl.java (6)
1-1: 패키지 구조 개선이 올바르게 적용되었습니다.
repository하위 패키지로 이동하여 패키지 구조가 더 명확해졌습니다.
18-18: 엔티티 import가 새로운 구조에 맞게 업데이트되었습니다.
QUserRoomJpaEntity→QRoomParticipantJpaEntity로의 변경이 올바르게 적용되었습니다.
37-37: Q엔티티 변수명이 일관되게 업데이트되었습니다.
QRoomParticipantJpaEntity.roomParticipantJpaEntity로 변경되었지만, 변수명은 여전히userRoom으로 유지되어 있습니다. 이는 기존 쿼리 로직과의 호환성을 위한 것으로 보입니다.
61-61: 필드 참조가 새로운 엔티티 구조에 맞게 업데이트되었습니다.
userRoomId→roomParticipantId로의 변경이 올바르게 적용되었습니다.
149-149: 멤버 수 계산 로직이 올바르게 업데이트되었습니다.
roomParticipantId.count()를 사용하여 멤버 수를 계산하는 로직이 정확히 적용되었습니다.
178-178: 서브쿼리 변수명이 새로운 엔티티에 맞게 업데이트되었습니다.
QRoomParticipantJpaEntity인스턴스를 사용하여 서브쿼리를 구성하는 로직이 올바르게 적용되었습니다.src/test/java/konkuk/thip/room/domain/RoomParticipantsTest.java (4)
1-1: 패키지 이동이 올바르게 적용되었습니다.
user.domain에서room.domain으로의 패키지 이동이 도메인 경계를 명확히 하는 좋은 변경입니다.
4-4: Role enum import가 올바르게 업데이트되었습니다.
RoomParticipantRoleimport가 정확한 패키지에서 가져오도록 업데이트되었습니다.
14-23: 헬퍼 메서드가 새로운 도메인 모델에 맞게 업데이트되었습니다.
RoomParticipant객체 생성과roomParticipantRole필드 사용이 올바르게 적용되었습니다.
29-30: 테스트 데이터 생성이 올바르게 업데이트되었습니다.
RoomParticipantRole.MEMBER와RoomParticipantRole.HOST사용이 정확하게 적용되었습니다.src/main/java/konkuk/thip/room/adapter/out/jpa/RoomParticipantJpaEntity.java (1)
1-40: 리팩토링이 잘 수행되었습니다.UserRoom에서 RoomParticipant로의 도메인 명확화와 패키지 구조 정리가 적절하게 수행되었습니다. 엔티티가 user 패키지에서 room 패키지로 이동한 것은 도메인 경계를 명확히 하는 좋은 변경입니다.
src/main/java/konkuk/thip/vote/adapter/out/jpa/VoteParticipantJpaEntity.java (1)
1-29: UserVote에서 VoteParticipant로의 리팩토링이 적절합니다.도메인 모델의 명확성을 위한 리네이밍이 잘 수행되었습니다. 사용자-투표 관계를 투표 참여자로 명명하는 것이 더 명확한 의미를 전달합니다.
src/main/java/konkuk/thip/room/adapter/out/jpa/RoomParticipantRole.java (1)
6-16: Enum 구조가 잘 설계되었습니다.HOST와 MEMBER 역할 정의와 한국어 레이블 매핑이 적절하게 구현되었습니다. Lombok의
@Getter사용으로 코드가 간결해졌습니다.src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteQueryPersistenceAdapter.java (1)
6-7: Repository 의존성 변경이 적절하게 수행되었습니다.
UserVoteJpaRepository에서VoteParticipantJpaRepository로의 교체와 관련 메서드 호출 업데이트가 일관되게 수행되었습니다.Also applies to: 20-20, 24-24
src/test/java/konkuk/thip/room/adapter/in/web/RoomSearchApiTest.java (1)
8-9: 테스트 코드의 리팩토링이 일관되게 수행되었습니다.
UserRoomJpaEntity에서RoomParticipantJpaEntity로의 변경과 관련 import, repository 의존성, 테스트 데이터 생성 코드가 모두 일관되게 업데이트되었습니다. 테스트 로직은 그대로 유지되어 기존 기능의 동작을 보장합니다.Also applies to: 15-15, 61-61, 65-65, 148-156
src/main/java/konkuk/thip/room/adapter/out/persistence/repository/RoomParticipantJpaRepository.java (1)
1-13: 리팩토링이 잘 적용되었습니다.UserRoom에서 RoomParticipant로의 전환이 깔끔하게 이루어졌고, 저장소 인터페이스가 room 패키지 하위 repository 서브패키지로 적절히 이동되었습니다. 쿼리 메서드명도 JPA 네이밍 컨벤션을 잘 따르고 있습니다.
src/main/java/konkuk/thip/user/application/port/out/UserRoomCommandPort.java (1)
3-3: 임포트 및 반환 타입 변경이 올바르게 적용되었습니다.
RoomParticipant임포트와 메서드 반환 타입이 일관되게 변경되어 리팩토링이 잘 적용되었습니다.Also applies to: 9-10
src/test/java/konkuk/thip/record/adapter/in/web/RecordCreateControllerTest.java (3)
6-6: 임포트 경로 업데이트가 올바르게 적용되었습니다.저장소 인터페이스들이 repository 서브패키지로 이동한 것에 맞춰 임포트 경로가 정확하게 업데이트되었습니다.
Also applies to: 10-10, 13-20
72-72: 저장소 필드명과 사용법이 일관되게 변경되었습니다.
RoomParticipantJpaRepository로 필드명이 변경되고, tearDown 메서드에서도 일관되게 사용되고 있습니다.Also applies to: 77-77
97-105: 엔티티 생성 코드가 올바르게 변경되었습니다.
RoomParticipantJpaEntity와RoomParticipantRole.HOST사용이 적절하게 적용되었습니다.src/test/java/konkuk/thip/common/util/TestEntityFactory.java (2)
7-8: 임포트 변경이 올바르게 적용되었습니다.새로운 엔티티와 역할 열거형으로 임포트가 정확하게 변경되었습니다.
104-110: 엔티티 생성 로직이 올바르게 변경되었습니다.
RoomParticipantJpaEntity빌더 사용과roomParticipantRole필드 설정이 적절하게 적용되었습니다.src/main/java/konkuk/thip/room/domain/RoomParticipants.java (3)
1-1: 패키지 이동이 적절합니다.
RoomParticipants가room.domain패키지로 이동한 것은 도메인 구조상 매우 적절한 변경입니다.
4-4: 타입 변경이 일관되게 적용되었습니다.
RoomParticipantRole임포트와RoomParticipant타입 사용이 모든 곳에서 일관되게 적용되었습니다.Also applies to: 19-19, 21-21
37-37: 메서드 내부 구현이 올바르게 변경되었습니다.스트림 연산에서
RoomParticipantRole과RoomParticipant메서드 호출이 정확하게 업데이트되었습니다.Also applies to: 43-43, 51-51
src/main/java/konkuk/thip/room/adapter/out/mapper/RoomParticipantMapper.java (1)
1-36: 매퍼 클래스가 올바르게 구현되었습니다.RoomParticipant 도메인 엔티티와 JPA 엔티티 간의 변환 로직이 정확하게 구현되어 있습니다. 필드 매핑도 일관성 있게 처리되었습니다.
src/main/java/konkuk/thip/vote/adapter/out/mapper/VoteParticipantMapper.java (1)
18-27: 도메인 엔티티 변환 로직이 정확합니다.JPA 엔티티에서 도메인 엔티티로의 변환이 올바르게 구현되어 있습니다.
src/test/java/konkuk/thip/room/adapter/in/web/RoomRecruitingDetailViewApiTest.java (1)
1-343: 테스트 코드가 리팩토링된 도메인 모델에 맞게 올바르게 업데이트되었습니다.UserRoom 관련 엔티티와 리포지토리를 RoomParticipant로 일괄 변경한 것이 정확하고 일관성 있게 적용되었습니다. 테스트 로직은 변경되지 않고 타입과 네이밍만 업데이트되어 안전한 리팩토링입니다.
src/main/java/konkuk/thip/room/adapter/out/persistence/RoomParticipantCommandPersistenceAdapter.java (1)
23-36: 퍼시스턴스 어댑터 구현 로직이 올바릅니다.매퍼를 사용한 엔티티 변환과 리포지토리 호출 로직이 정확하게 구현되어 있습니다.
src/main/java/konkuk/thip/record/application/service/RecordCreateService.java (1)
15-98: 서비스 클래스가 리팩토링된 도메인 모델에 맞게 올바르게 업데이트되었습니다.UserRoom을 RoomParticipant로 변경한 것이 일관성 있게 적용되었고, 비즈니스 로직은 변경되지 않아 안전한 리팩토링입니다. 변수명, 메서드 파라미터, 임포트가 모두 정확하게 업데이트되었습니다.
...kuk/thip/attendanceCheck/adapter/out/persistence/AttendanceCheckQueryPersistenceAdapter.java
Outdated
Show resolved
Hide resolved
| import jakarta.persistence.EntityManager; | ||
| import konkuk.thip.book.adapter.out.jpa.BookJpaEntity; | ||
| import konkuk.thip.book.adapter.out.persistence.BookJpaRepository; | ||
| import konkuk.thip.book.adapter.out.persistence.repository.BookJpaRepository; | ||
| import konkuk.thip.common.util.TestEntityFactory; | ||
| import konkuk.thip.room.adapter.out.persistence.CategoryJpaRepository; | ||
| import konkuk.thip.room.adapter.out.persistence.RoomJpaRepository; | ||
| import konkuk.thip.room.adapter.out.persistence.repository.CategoryJpaRepository; | ||
| import konkuk.thip.room.adapter.out.persistence.repository.RoomJpaRepository; | ||
| import konkuk.thip.user.adapter.out.jpa.AliasJpaEntity; |
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.
CategoryJpaEntity import 누락으로 인한 컴파일 오류
아래 코드에서 CategoryJpaEntity 를 사용하지만 import 문이 없습니다. 컴파일 단계에서 바로 실패하므로 반드시 추가해주세요.
import jakarta.persistence.EntityManager;
import konkuk.thip.book.adapter.out.jpa.BookJpaEntity;
+import konkuk.thip.room.adapter.out.jpa.CategoryJpaEntity; // 추가
import konkuk.thip.book.adapter.out.persistence.repository.BookJpaRepository;📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| import jakarta.persistence.EntityManager; | |
| import konkuk.thip.book.adapter.out.jpa.BookJpaEntity; | |
| import konkuk.thip.book.adapter.out.persistence.BookJpaRepository; | |
| import konkuk.thip.book.adapter.out.persistence.repository.BookJpaRepository; | |
| import konkuk.thip.common.util.TestEntityFactory; | |
| import konkuk.thip.room.adapter.out.persistence.CategoryJpaRepository; | |
| import konkuk.thip.room.adapter.out.persistence.RoomJpaRepository; | |
| import konkuk.thip.room.adapter.out.persistence.repository.CategoryJpaRepository; | |
| import konkuk.thip.room.adapter.out.persistence.repository.RoomJpaRepository; | |
| import konkuk.thip.user.adapter.out.jpa.AliasJpaEntity; | |
| import jakarta.persistence.EntityManager; | |
| import konkuk.thip.book.adapter.out.jpa.BookJpaEntity; | |
| import konkuk.thip.room.adapter.out.jpa.CategoryJpaEntity; // 추가 | |
| import konkuk.thip.book.adapter.out.persistence.repository.BookJpaRepository; | |
| import konkuk.thip.common.util.TestEntityFactory; | |
| import konkuk.thip.room.adapter.out.persistence.repository<CategoryJpaRepository>; | |
| import konkuk.thip.room.adapter.out.persistence.repository.RoomJpaRepository; | |
| import konkuk.thip.user.adapter.out.jpa.AliasJpaEntity; |
🤖 Prompt for AI Agents
In src/test/java/konkuk/thip/room/adapter/out/jpa/VoteJpaEntityTest.java around
lines 3 to 9, the import statement for CategoryJpaEntity is missing, causing a
compilation error. Add the appropriate import statement for CategoryJpaEntity to
the import section to resolve the compilation failure.
src/main/java/konkuk/thip/room/adapter/out/jpa/RoomParticipantJpaEntity.java
Show resolved
Hide resolved
src/main/java/konkuk/thip/vote/adapter/out/jpa/VoteParticipantJpaEntity.java
Show resolved
Hide resolved
src/main/java/konkuk/thip/user/application/port/out/UserRoomCommandPort.java
Outdated
Show resolved
Hide resolved
src/main/java/konkuk/thip/user/application/port/out/UserRoomCommandPort.java
Outdated
Show resolved
Hide resolved
.../java/konkuk/thip/room/adapter/out/persistence/RoomParticipantCommandPersistenceAdapter.java
Outdated
Show resolved
Hide resolved
.../java/konkuk/thip/room/adapter/out/persistence/RoomParticipantCommandPersistenceAdapter.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: 1
♻️ Duplicate comments (1)
src/main/java/konkuk/thip/room/adapter/out/jpa/RoomParticipantRole.java (1)
20-27: 예외 처리가 제대로 구현되었습니다.이전 리뷰 코멘트에서 지적된 null 반환 문제가 해결되어
InvalidStateException을 던지도록 구현되었습니다. 적절한 에러 코드와 함께 예외 처리가 잘 되어 있습니다.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (14)
src/main/java/konkuk/thip/attendancecheck/adapter/out/persistence/AttendanceCheckQueryPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/attendancecheck/application/port/out/AttendanceCheckQueryPort.java(1 hunks)src/main/java/konkuk/thip/common/exception/code/ErrorCode.java(2 hunks)src/main/java/konkuk/thip/record/application/service/RecordCreateService.java(3 hunks)src/main/java/konkuk/thip/room/adapter/out/jpa/RoomParticipantJpaEntity.java(2 hunks)src/main/java/konkuk/thip/room/adapter/out/jpa/RoomParticipantRole.java(1 hunks)src/main/java/konkuk/thip/room/adapter/out/persistence/RoomParticipantParticipantCommandPersistenceAdapter.java(1 hunks)src/main/java/konkuk/thip/room/application/port/out/RoomParticipantCommandPort.java(1 hunks)src/main/java/konkuk/thip/room/application/port/out/RoomParticipantQueryPort.java(1 hunks)src/main/java/konkuk/thip/room/application/service/RoomGetMemberListService.java(3 hunks)src/main/java/konkuk/thip/room/application/service/RoomShowPlayingDetailViewService.java(3 hunks)src/main/java/konkuk/thip/room/application/service/RoomShowRecruitingDetailViewService.java(3 hunks)src/main/java/konkuk/thip/user/application/port/out/UserRoomQueryPort.java(0 hunks)src/main/java/konkuk/thip/vote/adapter/out/jpa/VoteParticipantJpaEntity.java(1 hunks)
💤 Files with no reviewable changes (1)
- src/main/java/konkuk/thip/user/application/port/out/UserRoomQueryPort.java
✅ Files skipped from review due to trivial changes (4)
- src/main/java/konkuk/thip/room/application/port/out/RoomParticipantQueryPort.java
- src/main/java/konkuk/thip/attendancecheck/application/port/out/AttendanceCheckQueryPort.java
- src/main/java/konkuk/thip/attendancecheck/adapter/out/persistence/AttendanceCheckQueryPersistenceAdapter.java
- src/main/java/konkuk/thip/room/application/port/out/RoomParticipantCommandPort.java
🚧 Files skipped from review as they are similar to previous changes (6)
- src/main/java/konkuk/thip/room/application/service/RoomGetMemberListService.java
- src/main/java/konkuk/thip/room/application/service/RoomShowPlayingDetailViewService.java
- src/main/java/konkuk/thip/room/adapter/out/jpa/RoomParticipantJpaEntity.java
- src/main/java/konkuk/thip/room/application/service/RoomShowRecruitingDetailViewService.java
- src/main/java/konkuk/thip/vote/adapter/out/jpa/VoteParticipantJpaEntity.java
- src/main/java/konkuk/thip/record/application/service/RecordCreateService.java
🧰 Additional context used
🧠 Learnings (1)
src/main/java/konkuk/thip/room/adapter/out/persistence/RoomParticipantParticipantCommandPersistenceAdapter.java (1)
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#43
File: src/main/java/konkuk/thip/book/application/port/out/BookCommandPort.java:0-0
Timestamp: 2025-07-03T03:05:05.031Z
Learning: THIP 프로젝트에서는 CQRS Port 분리 시 다음 컨벤션을 따름: CommandPort에는 findByXXX를 통해 도메인 엔티티를 찾아오는 메서드를 추가하고, QueryPort에는 조회 API의 response에 해당하는 데이터들을 DB로부터 조회하는 메서드를 추가함.
🧬 Code Graph Analysis (2)
src/main/java/konkuk/thip/room/adapter/out/persistence/RoomParticipantParticipantCommandPersistenceAdapter.java (1)
src/main/java/konkuk/thip/common/exception/EntityNotFoundException.java (1)
EntityNotFoundException(5-10)
src/main/java/konkuk/thip/room/adapter/out/jpa/RoomParticipantRole.java (2)
src/main/java/konkuk/thip/room/domain/RoomParticipant.java (1)
Getter(7-37)src/main/java/konkuk/thip/room/domain/RoomParticipants.java (1)
Getter(12-55)
🔇 Additional comments (5)
src/main/java/konkuk/thip/common/exception/code/ErrorCode.java (2)
75-75: 에러 코드 수정이 적절합니다.
INVALID_SEARCH_TYPE의 코드가 900000에서 90000으로 수정되어 일관성을 유지합니다.
108-112: 도메인 리팩토링에 맞는 에러 코드 업데이트가 잘 되었습니다.UserRoom에서 RoomParticipant로의 도메인 변경에 따라 에러 코드와 메시지가 일관성 있게 업데이트되었고, 새로운
ROOM_PARTICIPANT_ROLE_NOT_MATCH에러 코드 추가도 적절합니다.src/main/java/konkuk/thip/room/adapter/out/jpa/RoomParticipantRole.java (1)
9-12: Enum 구조가 잘 정의되었습니다.HOST와 MEMBER 역할이 명확하게 정의되어 있고, 한국어 타입 값도 적절합니다.
src/main/java/konkuk/thip/room/adapter/out/persistence/RoomParticipantParticipantCommandPersistenceAdapter.java (2)
23-29: findByUserIdAndRoomId 메서드가 적절하게 구현되었습니다.적절한 예외 처리와 함께 도메인 엔티티로의 매핑이 올바르게 구현되어 있습니다.
32-36: findAllByRoomId 메서드가 깔끔하게 구현되었습니다.스트림을 사용한 매핑과
toList()사용이 적절하고, CQRS 패턴에 따른 CommandPort 구현이 올바릅니다.
...k/thip/room/adapter/out/persistence/RoomParticipantParticipantCommandPersistenceAdapter.java
Outdated
Show resolved
Hide resolved
|
hd0rable
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.
Post 패키지 하위에 있는 PostLike와 Content를 어떻게 할지 고민인데, 일단은 두 도메인 모두 Record, Feed, Vote에서 공통으로 사용되기 때문에 postBase 패키지로 adapter.in 만 없이 유지시킬까 생각중입니다! 이 부분에 대해서 다른 의견 있으신 분이 있다면 커멘드 주시면 감사하겠습니다
Post 패키지 하위에 있는 PostLike와 Content를 어떻게 할지 고민인데, 일단은 두 도메인 모두 Record, Feed, Vote에서 공통으로 사용되기 때문에 postBase 패키지로 adapter.in 만 없이 유지시킬까 생각중입니다! 이 부분에 대해서 다른 의견 있으신 분이 있다면 커멘드 주시면 감사하겠습니다
Content는 Feed에만 속하므로 Content는 Feed하위 패키지로 넣는게 맞을것같습니다
저희 Post의 상속구조를 없애는 것이 거의 확정 된것같은데 그로인해 생기는 Like들은 각 루트 애그리거트 내의 패키지로 이동하면 좋을 것 같습니다!!
정말 번거로운 작업 해주셨는데 사소한 리뷰 하나 남겼습니다 확인해주시면 감사하겠씁니다!!
| @@ -1,4 +1,4 @@ | |||
| package konkuk.thip.user.adapter.out.persistence; | |||
| package konkuk.thip.user.adapter.out.persistence.repository; | |||
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.
p3: User에서 Alias와 Room에서 Category도 repository안에서 패키지로 구분하는 것은 어떨까요? 저희가 하나의 애그리거트에 속해있는 엔티티,밸류가많아지면서 구분하기 위해 패키지 구조를 변경한 것이라고 생각했는데 밸류라고 할지라도 가독성을위해 Alias, Category도 repository안에서 패키지로 구분하는게 낫지않을까 싶습니다! 현재 제가 구현중인 Feed에서도 tag,content,feedtag도 repository안에서 패키지로 구분하는식으로 리펙토링했긴 합니다!
domain에서는 패키지로 구분하고있지않으니 해당 패키지에서 애그리거트의 루트안에 속한 엔티티라고 구분도 될 것 같습니다!
패키지 구조 상 루트 애그리거트 안에있는 모든 엔티티/밸류 들을 repository안에서 패키지로 구분하는데 가독성을 높이는데 도움이 될것같습니당
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.
넵 뒷 pr에서 반영해보겠습니다!



#️⃣ 연관된 이슈
📝 작업 내용
패키지 구조를 다음과 같이 정리했습니다.
추가적으로 Room에 memberCount를 추가했습니다. 방 참여 api를 만들때 memberCount를 증가시켜주면 될 것 같습니다! 현재 방의 멤버수를 구하는 count 쿼리를 제가 건드리는 것은 어려울 것 같아 각자 맡으신 분이 리팩해주시면 될 것 같아요~
💬 리뷰 요구사항
Post 패키지 하위에 있는 PostLike와 Content를 어떻게 할지 고민인데, 일단은 두 도메인 모두 Record, Feed, Vote에서 공통으로 사용되기 때문에 postBase 패키지로 adapter.in 만 없이 유지시킬까 생각중입니다! 이 부분에 대해서 다른 의견 있으신 분이 있다면 커멘드 주시면 감사하겠습니다~
📌 PR 진행 시 이러한 점들을 참고해 주세요
Summary by CodeRabbit
신규 기능
리팩터
버그 수정
테스트
기타