Skip to content

Conversation

@buzz0331
Copy link
Contributor

@buzz0331 buzz0331 commented Jun 24, 2025

#️⃣ 연관된 이슈

closes #25

📝 작업 내용

패키지를 도메인 단위로 분리했습니다.

📌 PR 진행 시 이러한 점들을 참고해 주세요

* P1 : 꼭 반영해 주세요 (Request Changes) - 이슈가 발생하거나 취약점이 발견되는 케이스 등
* P2 : 반영을 적극적으로 고려해 주시면 좋을 것 같아요 (Comment)
* P3 : 이런 방법도 있을 것 같아요~ 등의 사소한 의견입니다 (Chore)

Summary by CodeRabbit

  • 신규 기능

    • 출석체크, 알림, 최근 검색, 기록, 저장, 투표 등 다양한 도메인에 대한 새로운 웹 컨트롤러, 서비스, 요청/응답 객체, 리포지토리, 퍼시스턴스 어댑터, 포트 인터페이스 등이 추가되었습니다.
  • 문서화

    • 여러 도메인에서 Lombok 어노테이션이 적용된 DTO 및 응답/요청 클래스가 추가되었습니다.
  • 리팩터링

    • 여러 엔티티, 매퍼, 리포지토리, 도메인 클래스의 패키지 및 import 경로가 일관성 있게 정리되었습니다.
    • 기존의 room, book, user, feed, post 등 다양한 도메인의 import 및 패키지 구조가 실제 도메인에 맞게 조정되었습니다.
  • 스타일

    • Lombok 어노테이션 import 방식이 명시적으로 변경되고, 코드 스타일이 통일되었습니다.
  • 테스트

    • 테스트 코드의 import 경로가 실제 패키지 구조에 맞게 수정되었습니다.

@coderabbitai
Copy link

coderabbitai bot commented Jun 24, 2025

Walkthrough

이번 변경에서는 여러 도메인(출석체크, 알림, 최근검색, 기록, 저장, 투표 등)에 대해 패키지 구조를 도메인 단위로 재정비하였으며, 각 도메인별로 controller, service, port, persistence adapter, repository, mapper, domain, dto 등 기본적인 클래스와 인터페이스를 신규로 생성하였습니다. 기존의 잘못된 패키지 경로 및 import 문도 일관성 있게 수정되었습니다.

Changes

파일/그룹 변경 요약
...attendanceCheck/..., ...notification/..., ...recentSearch/..., ...record/..., ...saved/..., ...vote/... (각 도메인별 하위 패키지) 각 도메인별로 controller, service, port, persistence adapter, repository, mapper, domain, dto 등 기본 클래스/인터페이스 신규 생성 및 패키지 구조 정리
.../adapter/out/jpa, .../adapter/out/mapper, .../adapter/out/persistence, .../domain 기존 클래스의 패키지 선언 및 import 경로를 도메인별로 이동 및 정정
.../feed/adapter/out/jpa/FeedJpaEntity.java, .../post/adapter/out/jpa/PostJpaEntity.java, .../record/adapter/out/jpa/RecordJpaEntity.java, .../vote/adapter/out/jpa/VoteJpaEntity.java Lombok import 명시적 선언, Builder 등 어노테이션 추가, 생성자 명시 등 일부 클래스 어노테이션 및 생성자 추가/정정
.../comment/adapter/out/jpa/CommentJpaEntity.java, .../comment/adapter/out/mapper/CommentMapper.java, .../feed/adapter/out/jpa/TagJpaEntity.java, .../feed/adapter/out/mapper/TagMapper.java, .../user/adapter/out/jpa/UserVoteJpaEntity.java, .../user/adapter/out/mapper/UserVoteMapper.java Post, VoteItem 등 관련 엔티티 import 경로 정정
.../room/adapter/out/jpa/CategoryJpaEntity.java, .../room/adapter/out/mapper/CategoryMapper.java, .../room/adapter/out/mapper/RoomMapper.java, .../room/adapter/out/persistence/CategoryJpaRepository.java, .../room/domain/Category.java 기존 book 패키지에서 room 패키지로 클래스/인터페이스 이동 및 import 경로 정정
src/test/java/konkuk/thip/domain/room/adapter/out/jpa/... 테스트 코드 내 import 경로를 실제 패키지 구조에 맞게 정정

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant Controller
  participant Service
  participant Port
  participant PersistenceAdapter
  participant Repository
  participant Mapper
  participant Domain

  Client->>Controller: HTTP 요청
  Controller->>Service: 서비스 메서드 호출
  Service->>Port: 포트 인터페이스 호출
  Port->>PersistenceAdapter: 어댑터 호출
  PersistenceAdapter->>Repository: DB 접근
  PersistenceAdapter->>Mapper: 엔티티-도메인 변환
  Mapper->>Domain: 도메인 객체 반환
Loading

Assessment against linked issues

Objective (이슈 번호) Addressed Explanation
패키지 구조를 도메인 단위로 정리 (#25)
Task1, Task2 (구체적 명시 없음) Task1, Task2의 구체적 내용이 명시되지 않아 코드로 충족 여부를 판단할 수 없음.

Assessment against linked issues: Out-of-scope changes

해당 변경 내역에는 명시된 이슈(#25)의 목적(도메인별 패키지 구조 정리)과 무관한 기능적 변경, 로직 추가, 비즈니스 로직 구현 등은 발견되지 않았습니다.

Possibly related PRs

Poem

🐰
패키지가 쏙쏙, 도메인별로 정리,
깔끔한 구조에 토끼도 신이 나지!
컨트롤러, 서비스, 포트 줄줄이,
새 집 마련에 개발자도 환희!
Hop hop, 모듈이 춤추네—
구조정리 끝, 이제는 평화로워라!
🗂️✨

✨ Finishing Touches
  • 📝 Generate Docstrings

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need 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)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Member

@hd0rable hd0rable left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

😎

@sonarqubecloud
Copy link

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 27

🔭 Outside diff range comments (11)
src/main/java/konkuk/thip/recentSearch/domain/RecentSearch.java (2)

11-12: id 필드 중복 선언으로 인한 엔티티 불일치 가능성
BaseDomainEntity가 이미 id를 보유하고 있을 가능성이 높은데, 동일한 필드를 다시 선언하면 JPA‧도메인 매핑 단계에서 두 필드 중 어느 것이 실제 PK로 사용될지 혼란을 야기합니다. 중복 선언을 제거하거나, @AttributeOverride 등으로 명확히 지정하세요.


15-16: String 대신 enum 사용 권장
typeString으로 두면 SearchType 정의로부터 벗어난 임의 값이 저장될 수 있습니다. 강한 타이핑을 위해 SearchType enum으로 교체하고, 필요 시 컨버터를 추가하세요.

src/main/java/konkuk/thip/recentSearch/adapter/out/jpa/SearchType.java (1)

24-27: from() 메서드가 실패 시 null 반환 → NPE 위험
현재 로직은 매칭 실패 시 null을 반환합니다. 호출부가 방어 코드를 놓치면 런타임 NPE가 발생합니다. 예외를 던지거나 Optional<SearchType>을 반환하도록 개선해 주세요.

-        return null;
+        throw new IllegalArgumentException("Invalid search type: " + searchType);

또는

return Arrays.stream(values())
             .filter(t -> t.searchType.equals(searchType))
             .findFirst();
src/main/java/konkuk/thip/attendanceCheck/adapter/out/mapper/AttendanceCheckMapper.java (1)

20-29: NPE 가능성: 연관 엔티티 null-check 추가 권장
attendanceCheckJpaEntity.getRoomJpaEntity()getUserJpaEntity() 가 null일 경우 NPE가 발생합니다.
아래처럼 방어 코드 추가를 검토해주세요.

     public AttendanceCheck toDomainEntity(AttendanceCheckJpaEntity attendanceCheckJpaEntity) {
+        Objects.requireNonNull(attendanceCheckJpaEntity, "attendanceCheckJpaEntity must not be null");
+        Objects.requireNonNull(attendanceCheckJpaEntity.getRoomJpaEntity(), "roomJpaEntity must not be null");
+        Objects.requireNonNull(attendanceCheckJpaEntity.getUserJpaEntity(), "userJpaEntity must not be null");
         return AttendanceCheck.builder()
src/main/java/konkuk/thip/notification/adapter/out/mapper/NotificationMapper.java (1)

11-18: userJpaEntity null 처리 필요

toJpaEntity 에서 userJpaEntity 가 null 일 경우 NPE 없이 그대로 build 됩니다. DB 제약(외래키)이 있을 경우 런타임 오류가 발생하니, null 체크 혹은 Objects.requireNonNull 처리를 권장합니다.

- .userJpaEntity(userJpaEntity)
+ .userJpaEntity(Objects.requireNonNull(userJpaEntity, "userJpaEntity must not be null"))
src/main/java/konkuk/thip/post/adapter/out/jpa/PostLikeJpaEntity.java (1)

20-26: 같은 사용자의 중복 좋아요를 막을 Unique 제약 누락
post_iduser_id 복합키에 Unique 제약이 없으면 동일 사용자가 같은 글에 여러 번 좋아요를 남길 수 있습니다.

-@Table(name = "post_likes")
+@Table(
+    name = "post_likes",
+    uniqueConstraints = @UniqueConstraint(
+        name = "uk_post_like_post_user",
+        columnNames = {"post_id", "user_id"}
+    )
+)
src/main/java/konkuk/thip/vote/adapter/out/jpa/VoteItemJpaEntity.java (1)

27-29: JoinColumn 이름 오타로 FK 매핑 오류 발생 가능
VoteItemJpaEntityVoteJpaEntity 와 연관인데 @JoinColumn(name = "post_id") 로 지정되어 있습니다. 실제 컬럼은 vote_id 가 되어야 합니다.

-    @ManyToOne(fetch = FetchType.LAZY)
-    @JoinColumn(name = "post_id")
-    private VoteJpaEntity voteJpaEntity;
+    @ManyToOne(fetch = FetchType.LAZY, optional = false)
+    @JoinColumn(name = "vote_id",
+                foreignKey = @ForeignKey(name = "fk_vote_item_vote"))
+    private VoteJpaEntity voteJpaEntity;
src/main/java/konkuk/thip/saved/adapter/out/jpa/SavedBookJpaEntity.java (1)

21-27: 중복 저장 방지를 위한 유니크 제약 권장

동일 사용자-책 조합의 중복 저장을 방지하려면 다음과 같이 복합 유니크 인덱스를 권장합니다.

 @Table(name = "saved_books"
-)
+        , uniqueConstraints = @UniqueConstraint(name = "uk_saved_user_book",
+        columnNames = {"user_id", "book_id"}))

데이터 무결성을 DB 레벨에서 보장할 수 있습니다.

src/main/java/konkuk/thip/record/adapter/out/jpa/RecordJpaEntity.java (1)

19-23: page 필드에 컬럼 매핑 누락
isOverview@Column으로 명시돼 있지만 page는 빠져 있습니다. 스키마 생성 시 의도치 않게 nullable 컬럼으로 생성될 수 있으니 명시적으로 매핑해 두는 편이 안전합니다.

-    private Integer page;
+    @Column(name = "page", nullable = false)
+    private Integer page;
src/main/java/konkuk/thip/room/adapter/out/mapper/CategoryMapper.java (1)

11-16: aliasJpaEntity 널 체크 누락
toJpaEntity에서 aliasJpaEntitynull일 경우 NPE가 발생합니다. 서비스 계층에서 보장된다 해도 매퍼에서 한 줄로 방어해 두면 후속 유지보수 시 안전합니다.

+        Objects.requireNonNull(aliasJpaEntity, "aliasJpaEntity must not be null");
src/test/java/konkuk/thip/domain/room/adapter/out/jpa/RecordJpaEntityTest.java (1)

1-1: 패키지 위치가 도메인 구조와 맞지 않습니다
Record 도메인을 테스트하면서 테스트 클래스의 패키지가 여전히 domain.room 하위에 위치해 있습니다. 리팩토링 의도(도메인 단위 분리)에 맞추어 konkuk.thip.record.adapter.out.jpa 또는 별도 record 전용 테스트 패키지로 이동‧수정하는 편이 가독성과 유지보수에 도움이 됩니다.

♻️ Duplicate comments (3)
src/main/java/konkuk/thip/recentSearch/adapter/in/web/RecentSearchCommandController.java (1)

6-10: RecentSearchQueryController와 동일한 이슈가 있습니다.

빈 컨트롤러의 조기 생성으로 인한 불필요한 리소스 사용과 의미없는 어노테이션 사용 문제가 동일하게 발생합니다.

src/main/java/konkuk/thip/vote/adapter/in/web/response/DummyResponse.java (1)

3-7: 앞서 남긴 DummyResponse 피드백과 동일
같은 이슈가 반복됩니다. 공통 DTO 로의 추상화나 삭제를 고려해 주세요.

src/main/java/konkuk/thip/saved/adapter/in/web/response/DummyResponse.java (1)

3-7: 앞서 남긴 DummyResponse 피드백과 동일
같은 이슈가 반복됩니다. 공통 DTO 로의 추상화나 삭제를 고려해 주세요.

🧹 Nitpick comments (73)
src/main/java/konkuk/thip/attendanceCheck/adapter/in/web/request/UserSignupRequest.java (1)

1-1: 패키지 이름 컨벤션 불일치
Java 패키지는 관례적으로 모두 소문자를 사용합니다. attendanceCheck와 같이 카멜케이스를 쓰면 IDE 자동 정렬·패키지 탐색 시 일관성이 깨질 수 있습니다. attendancecheck 혹은 attendance 등으로 변경하는 방안을 고려해 주세요.

src/main/java/konkuk/thip/recentSearch/application/port/in/DummyUseCase.java (1)

3-5: 빈 인터페이스는 의도 명시 또는 제거 필요
DummyUseCase가 마커 인터페이스인지, 향후 메서드 정의를 위한 자리인지 주석으로 의도를 남기거나 삭제하는 편이 가독성에 도움이 됩니다.

src/main/java/konkuk/thip/recentSearch/adapter/out/jpa/RecentSearchJpaEntity.java (1)

6-31: UserJpaEntity 직접 참조는 계층 간 결합을 높입니다.

recentSearch의 persistence 어댑터가 user 모듈의 JPA 엔티티를 직접 의존하면, 바운디드 콘텍스트 간 결합이 강화되고 순환 의존 위험이 있습니다.
user_id만 보유하거나, 교차‐콘텍스트 식별자 VO(예: UserId)로 매핑한 뒤 @ManyToOne을 다른 어댑터에서 해결하도록 고려해 보세요.
필요 시 @ManyToOne(optional = false) 명시로 not-null 제약도 함께 검토하시기 바랍니다.

src/main/java/konkuk/thip/recentSearch/application/port/in/dto/DummyResult.java (1)

6-10: 필드가 없는 DTO에 @builder는 불필요합니다.

현재 클래스가 비어 있으므로 @Builder를 붙여도 생성될 빌더가 의미가 없습니다.
추후 필드 추가 예정이 아니라면 @Builder를 제거하거나, 최소한 예시 필드를 추가해 사용 의도를 명확히 해주세요.

src/main/java/konkuk/thip/recentSearch/adapter/in/web/response/DummyResponse.java (1)

5-7: 빈 Response 객체는 Swagger나 컨트롤러 단에서 의미가 희미합니다.

실제 응답 스펙이 정해지기 전까지는 void 또는 HTTP 상태 코드만 반환하도록 두고, 필요 시 필드 추가 후 DTO를 도입하는 편이 간결합니다.
지금 단계에서는 클래스 자체를 제거하거나 TODO 주석으로 향후 필드 계획을 명시해 두면 유지보수에 도움이 됩니다.

src/main/java/konkuk/thip/recentSearch/adapter/in/web/request/UserSignupRequest.java (1)

5-7: 요청 DTO에 검증 로직이 빠져 있습니다.

회원 가입 요청이라면 최소한 이메일, 비밀번호 등 필드와 @NotBlank, @Email 등의 Bean Validation 어노테이션이 필요합니다.
스캐폴딩 단계라면 TODO 주석으로 필드/검증 항목을 명시해 두는 것을 권장합니다.

src/main/java/konkuk/thip/recentSearch/application/port/in/dto/DummyCommand.java (1)

6-10: 빈 Command 객체는 유용성이 낮습니다.

DummyResult와 동일하게, 필드가 전무한 상태에서 @Builder를 사용하는 것은 과도합니다.
추후 실제 커맨드 속성을 설계할 때까지는 임시 클래스를 제거하거나 주석으로 향후 계획을 명시해 주세요.

src/main/java/konkuk/thip/recentSearch/application/port/in/dto/DummyQuery.java (1)

6-9: 빈 DTO 클래스의 필요성을 재검토해보세요.

필드가 없는 상태에서 @builder@Getter 어노테이션이 실질적인 기능을 하지 않습니다. 실제 요구사항이 정의될 때까지 이러한 플레이스홀더 클래스 생성을 지연하는 것을 고려해보세요.

src/main/java/konkuk/thip/recentSearch/adapter/in/web/RecentSearchQueryController.java (1)

6-10: 빈 컨트롤러 클래스의 생성 시점을 재고해보세요.

메소드나 의존성이 없는 상태에서 @requiredargsconstructor 어노테이션이 불필요하며, 빈 컨트롤러가 Spring 컨텍스트에 등록되어 리소스를 사용합니다. 실제 엔드포인트 구현이 필요할 때 클래스를 생성하는 것을 고려해보세요.

src/main/java/konkuk/thip/attendanceCheck/domain/AttendanceCheck.java (1)

13-18: 도메인-JPA 엔티티 간 식별자 이름 불일치

도메인 모델은 id, JPA 엔티티는 attendanceCheckId를 사용합니다. 이름 맞추기가 어렵지 않다면 동일한 식별자 명을 사용해 매핑 계층의 변환 로직 복잡도를 낮추는 것이 좋습니다.

src/main/java/konkuk/thip/attendanceCheck/application/port/in/DummyUseCase.java (1)

3-5: 빈 인터페이스·Dummy 네이밍은 생산 코드에 남기지 마세요

구현체 없이 비어 있는 DummyUseCase는 컴파일은 되지만 의미적 가치가 없습니다.

  1. 실제 유스케이스 메서드를 정의하거나
  2. 작업 완료 전이라면 TODO 주석과 함께 임시 커밋으로 두고, 최종 머지 전 삭제/구현을 권장합니다.
src/main/java/konkuk/thip/attendanceCheck/adapter/out/jpa/AttendanceCheckJpaEntity.java (1)

25-32: 연관관계 CascadeType 검토

RoomJpaEntity, UserJpaEntity와의 @ManyToOne 관계에 cascade 전략이 명시되지 않아 기본값(CascadeType.NONE)이 적용됩니다.
삭제·저장 전파가 필요한 도메인 규칙이라면 명시적으로 지정하여 의도치를 문서화해 주세요.

 @ManyToOne(fetch = FetchType.LAZY)
-@JoinColumn(name = "room_id")
+@JoinColumn(name = "room_id")
+@Cascade(CascadeType.PERSIST) // 예시: 필요 시 명시
 private RoomJpaEntity roomJpaEntity;
src/main/java/konkuk/thip/attendanceCheck/application/port/out/AttendanceCheckCommandPort.java (1)

3-6: 포트 인터페이스가 비어 있습니다

Command 역할이라면 최소한 생성/수정 메서드 시그니처를 정의해 애플리케이션 계층 계약을 명확히 해 주세요. 빈 인터페이스는 구현체에도 메서드가 없어 실제 로직이 퍼블릭 계층 밖으로 노출되지 않습니다.

src/main/java/konkuk/thip/attendanceCheck/adapter/in/web/response/DummyResponse.java (1)

5-7: 빈 DTO의 존재 이유를 명확히 해주세요
현재 필드가 전혀 없어 @Getter가 생성하는 메서드도 없고, 실질적으로 아무 역할을 하지 않습니다.
· 실제 응답 스펙이 정해지지 않았다면 TODO 주석을 달아 의도를 명시하거나,
· 임시용이라면 테스트 전용 위치로 이동하거나 제거하는 편이 유지보수에 유리합니다.
필요한 필드 정의·주석 추가 여부를 검토해 주세요.

src/main/java/konkuk/thip/attendanceCheck/application/port/in/dto/DummyResult.java (1)

6-10: 필드 없는 @builder / @Getter 조합은 불필요합니다
필드가 없는데 빌더·게터를 생성하면 실제로 사용할 수 있는 멤버가 없으므로, 객체를 생성해도 정보가 전혀 담기지 않습니다.

  1. 필드를 채울 예정이라면 TODO 주석으로 명시하고 빠르게 구현하거나,
  2. 그렇지 않다면 클래스를 제거해도 무방합니다.
src/main/java/konkuk/thip/attendanceCheck/application/port/in/dto/DummyCommand.java (1)

6-10: 의미 없는 더미 클래스 정리 필요
DummyResult와 동일하게 필드가 없으므로 사용 목적이 불분명합니다. 불필요한 코드 증가는 혼란을 야기하므로 조속히 구체화하거나 제거해 주세요.

src/main/java/konkuk/thip/attendanceCheck/application/port/in/dto/DummyQuery.java (1)

6-8: 불필요한 Placeholder 최소화 권장
필드 없는 DTO는 빌더/게터 생성만으로는 얻는 이점이 없습니다. 실제 Query 파라미터 확정 전까지는 주석 또는 TODO로 충분하니, 클래스 삭제 혹은 구체화가 필요합니다.

src/main/java/konkuk/thip/notification/application/port/in/DummyUseCase.java (1)

3-5: 빈 인터페이스는 의미를 명확히 하거나 제거하세요

DummyUseCase가 메서드 없이 비어 있습니다. 마커 인터페이스 패턴을 의도한 것이라면 해당 목적(예: CQRS 구분, AOP 타깃 등)을 주석으로 명시하세요. 그렇지 않다면 불필요한 타입 계층만 늘어나므로 삭제를 고려하세요.

src/main/java/konkuk/thip/notification/domain/Notification.java (1)

7-20: 도메인 엔티티에 불변성/생성자 추가 고려

도메인 레이어에서는 불변 객체(필드 final, 생성자만 노출)를 권장합니다. 현재는 Lombok @builder만 사용되어 런타임에 세터 없이도 변경 가능성이 있습니다. 필요 시 다음과 같이 설계 변경을 검토하세요.

src/main/java/konkuk/thip/notification/adapter/out/jpa/NotificationJpaEntity.java (2)

26-28: 불린 타입 컬럼명 컨벤션 일치

isChecked 필드를 @Column(name = "is_checked")로 매핑했는데, boolean 게터는 isChecked()가 생성됩니다. DB 컬럼과 객체 속성 간 의미가 일치해 문제는 없지만, 읽기 전용 DTO 변환 시 prefixed is가 중복될 수 있으니 확인 바랍니다.


29-31: @ManyToOne 옵션 구체화 권장

fetch = LAZY만 명시되어 있고 optional = false, cascade 옵션이 없습니다.

  • 알림은 반드시 사용자에 귀속되는지(nullable = false) 여부를 스키마로 보장할지 결정하세요.
  • 삭제 전이(cascade = REMOVE) 필요 여부도 도메인 요구사항에 맞춰 설정하세요.
src/main/java/konkuk/thip/notification/adapter/in/web/response/DummyResponse.java (1)

5-7: 필드가 전무한 DTO – 사용처와 목적을 명확히 해주세요

@Getter만 달린 빈 DTO는 직렬화 결과가 {} 로만 남아 실제 API 응답 스펙을 혼란스럽게 만들 수 있습니다.

  • 응답 바디가 아직 정의되지 않았다면 TODO 주석으로 명시하거나
  • 최소한 예시 필드를 추가해 향후 스펙을 드러내 주세요.
src/main/java/konkuk/thip/notification/application/port/in/dto/DummyResult.java (1)

6-10: Builder 패턴의 무의미한 사용

필드가 없는 상태에서 @Builder 를 붙이면 생성할 값이 없어 오히려 혼란을 줍니다. 필드 추가 전이라면 @Builder 를 제거하거나, 예시 필드를 먼저 정의해 주세요.

src/main/java/konkuk/thip/notification/adapter/out/mapper/NotificationMapper.java (1)

20-30: 매핑 누락 가능성 점검

toDomainEntity 에서 notificationJpaEntity.getStatus() 를 그대로 넘기는데, Notification 도메인 객체의 status 필드가 null 허용이 아니라면 디폴트 값 보장 여부를 확인해 주세요. 또한 불필요하게 Builder 를 계속 생성하면 가독성이 떨어질 수 있으므로 MapStruct 등의 매퍼 사용을 고려해볼 만합니다.

src/main/java/konkuk/thip/notification/application/port/in/dto/DummyCommand.java (1)

6-10: 빈 Command 객체 – 유효성 검증 및 스펙 정의 필요

입력 DTO가 비어 있으면 컨트롤러 레이어에서 요청 바디가 항상 {} 로만 전달돼 유효성 검증이 무력화됩니다. 예상 파라미터(예: title, content 등)를 필드로 선언하고 @NotBlank 같은 검증 애너테이션을 미리 달아 두면 추후 작업이 수월합니다.

src/main/java/konkuk/thip/notification/application/port/in/dto/DummyQuery.java (1)

6-9: Builder-패턴 DTO에 필드가 없음

@Builder가 붙어 있지만 빌더로 설정할 수 있는 프로퍼티가 전혀 없습니다.
• 실제 조회용 파라미터가 정해지면 필드를 추가하고 빌더를 활용하세요.
• 당장 필요 없다면 클래스 생성을 보류하거나 주석으로 의도를 명확히 표기하는 편이 낫습니다.

src/main/java/konkuk/thip/notification/adapter/out/persistence/NotificationCommandPersistenceAdapter.java (1)

10-15: 빈 구현체 완성 필요

현재 클래스는 구조만 정의되어 있고 실제 구현이 없습니다. NotificationCommandPort 인터페이스의 메서드들을 구현해야 합니다.

NotificationCommandPort 인터페이스의 메서드 구현을 도와드릴까요?

src/main/java/konkuk/thip/notification/adapter/out/persistence/NotificationQueryPersistenceAdapter.java (1)

10-15: 빈 구현체 완성 필요

현재 클래스는 구조만 정의되어 있고 실제 구현이 없습니다. NotificationQueryPort 인터페이스의 메서드들을 구현해야 합니다.

NotificationQueryPort 인터페이스의 메서드 구현을 도와드릴까요?

src/main/java/konkuk/thip/vote/domain/Vote.java (1)

9-22: id 필드 중복 정의 가능성 및 불린 프로퍼티 네이밍 확인이 필요합니다.

  1. BaseDomainEntityid가 이미 선언돼 있을 가능성이 높습니다. 중복 시 JPA 매핑 충돌이 발생하니 확인 후 제거를 고려해 주세요.
  2. isOverview 필드명은 Lombok 접근자 생성 시 isIsOverview() 형태가 되어 직관성이 떨어집니다. overview 또는 overviewYn 등으로 교체하면 getter 가독성이 좋아집니다.
src/main/java/konkuk/thip/record/domain/Record.java (1)

9-22: Vote 모델과 동일한 구조 중복 – 공통 추상화 고려

RecordVote가 거의 동일한 필드 구조를 갖고 있습니다.
중복 모델이 반복된다면 공통 부모(예: PageContent)로 추상화하여 코드량과 유지보수 비용을 줄일 수 있습니다.

src/main/java/konkuk/thip/vote/domain/VoteItem.java (1)

9-18: 카운트 타입 및 가시성 검토

  • count가 투표 수라면 long 또는 Integer가 확장성 측면에서 안전합니다.
  • 도메인 규칙(불변성, 증가 메서드 등)을 엔티티 내부로 캡슐화하면 서비스 계층에서의 실수 가능성을 줄일 수 있습니다.
src/main/java/konkuk/thip/post/domain/PostLike.java (1)

7-16: 도메인 객체에 동등성 메서드 추가 고려
PostLike는 (userId, targetPostId) 복합키 성격이 강합니다. 컬렉션 비교나 중복 방지를 위해 equals/hashCode 구현을 검토해 보세요.

src/main/java/konkuk/thip/saved/domain/SavedBook.java (1)

7-16: 도메인 명칭 일관성 제안
SavedBook, SavedFeed 등 prefix ‘Saved’가 명사형인지 동사형인지 혼재될 우려가 있습니다. Bookmark, Favorite 등 도메인 용어 재검토를 P2 의견으로 제안드립니다.

src/main/java/konkuk/thip/saved/domain/SavedFeed.java (1)

7-16: 중복 로직 대비 설계 고려
SavedBook·SavedFeed 가 필드 구조가 유사하므로 제네릭 기반 공통 부모나 MappedSuperclass 활용을 고려해 중복을 줄일 수 있습니다.

src/main/java/konkuk/thip/post/domain/Content.java (1)

11-15: 타입 구체화 제안
contentUrlString 대신 java.net.URI (또는 별도 Value Object) 로 추상화하면 유효성 검증과 불변성을 자연스럽게 확보할 수 있습니다.

src/main/java/konkuk/thip/post/adapter/out/jpa/ContentJpaEntity.java (1)

20-25: FK 설정이 최소화되어 있어 삭제‧수정 시 무결성 위험
현재 @ManyToOne 관계에 cascade 옵션이 없고, @JoinColumn 에도 foreign key 명시가 없습니다.

  • Post 삭제 시 Content 고아가 남을 수 있습니다.
  • DB 레벨 FK 제약을 명시하여 무결성을 보장하는 편이 안전합니다.
-    @ManyToOne(fetch = FetchType.LAZY)
-    @JoinColumn(name = "post_id", nullable = false)
+    @ManyToOne(fetch = FetchType.LAZY, optional = false, cascade = CascadeType.REMOVE)
+    @JoinColumn(name = "post_id", nullable = false,
+                foreignKey = @ForeignKey(name = "fk_contents_post"))
src/main/java/konkuk/thip/room/adapter/out/jpa/CategoryJpaEntity.java (1)

25-28: @OnetoOne 관계에 Cascade·Unique 제약 고려
AliasJpaEntity 와 1:1 관계라면 unique=true 제약과 적절한 cascade 옵션을 부여해 두 객체 생명주기를 맞춰주는 편이 안전합니다.

-    @OneToOne(fetch = FetchType.LAZY)
-    @JoinColumn(name = "category_alias_id", nullable = false)
+    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, optional = false)
+    @JoinColumn(name = "category_alias_id", nullable = false, unique = true,
+                foreignKey = @ForeignKey(name = "fk_category_alias"))
src/main/java/konkuk/thip/comment/adapter/out/mapper/CommentMapper.java (1)

12-20: parent 파라미터 명확성 개선 제안
CommentJpaEntity commentJpaEntity가 부모 댓글을 의미한다면 변수명을 parentCommentJpaEntity 등으로 바꾸면 코드 가독성이 더 좋아질 것 같습니다.

src/main/java/konkuk/thip/saved/application/port/in/DummyUseCase.java (1)

1-5: 빈 인터페이스 유지 목적 재확인 필요
Hexagonal 아키텍처에서 포트 정의를 위한 placeholder라면 OK지만, 장기간 빈 상태로 남지 않도록 TODO 주석이나 설명을 추가해 두는 것을 권장합니다.

src/main/java/konkuk/thip/record/application/port/in/DummyUseCase.java (1)

1-5: 빈 인터페이스에 대한 동일한 코멘트
saved 모듈과 동일하게, 추후 구현 계획이나 목적을 명시해 주시면 유지보수에 도움이 됩니다.

src/main/java/konkuk/thip/record/application/port/out/RecordCommandPort.java (1)

3-6: 빈 인터페이스만 생성되어 실질 기능이 없음

Command Port는 애그리게이트의 저장·수정 기능 계약을 명확히 드러내도록 메서드 시그니처를 포함하는 것이 좋습니다.
현재는 마커 인터페이스 역할만 하므로 실제 구현(RecordCommandPersistenceAdapter)과 서비스 계층에서 어떤 계약을 따르는지 파악하기 어렵습니다. 최소한 TODO 주석이나 Javadoc으로 추후 정의 계획을 명시해 두면 유지보수자가 혼란을 줄일 수 있습니다.

src/main/java/konkuk/thip/vote/application/port/in/DummyUseCase.java (1)

3-5: 실제 유스케이스 정의가 누락됨

DummyUseCase라는 이름과 내용 모두가 임시(place-holder) 상태입니다.

  1. 명확한 유스케이스 이름으로 변경하고
  2. API 시그니처(명령·쿼리 DTO) 를 정의하여 구현체(VoteService)가 어떤 기능을 제공하는지 드러내 주세요.

예시:

public interface CreateVoteUseCase {
    VoteId createVote(CreateVoteCommand command);
}
src/main/java/konkuk/thip/saved/adapter/out/jpa/SavedBookJpaEntity.java (1)

6-6: UserJpaEntity 직접 의존으로 모듈 결합이 강해짐

SavedBookJpaEntityuser.adapter.out.jpa.UserJpaEntity에 직접 의존하면 도메인 간 결합도가 높아집니다.

  1. user 도메인을 별도 모듈로 분리할 계획이라면 의존성 역전을 고려하거나
  2. 최소한 FK 열만 보유하고, 연관관계는 도메인 서비스 레이어에서 조회하도록 리팩터링할 수 있습니다.
src/main/java/konkuk/thip/vote/application/port/out/VoteQueryPort.java (1)

3-5: Query Port에 조회 계약 추가 필요

VoteQueryPersistenceAdapter가 구현하지만, 계약이 비어 있어 팀원이 어떤 조회를 제공하는지 알기 어렵습니다.
예: Optional<Vote> findById(Long voteId); 등 필수 메서드를 정의해 주세요.

src/main/java/konkuk/thip/saved/application/port/out/SavedQueryPort.java (1)

3-5: Saved 도메인 조회 계약이 정의되지 않음

다른 포트들과 동일하게 구체적인 조회 메서드를 선언해야 어댑터·서비스 계층이 명확히 의존할 수 있습니다.
또한 Javadoc으로 반환 값 및 예외를 문서화하면 좋습니다.

src/main/java/konkuk/thip/record/application/port/out/RecordQueryPort.java (1)

3-5: 빈 인터페이스만 존재하여 실질적인 계약이 부재합니다
조회 포트라면 최소한 “어떤 레코드를 어떤 조건으로 가져온다”는 메서드 시그니처가 포함돼야 서비스·어댑터 계층이 일관된 계약을 공유할 수 있습니다. 설계가 아직 확정되지 않았다면 // TODO 주석으로 미완성을 명시하거나, 기본적인 조회 메서드를 선언해 주세요.

src/main/java/konkuk/thip/saved/application/port/out/SavedCommandPort.java (1)

4-6: 명세 없는 Command 포트
커맨드 포트 역시 도메인 저장·삭제·수정 등의 역할을 수행할 메서드 시그니처가 필요합니다. 빈 인터페이스만 두면 구현체와 호출부가 각기 다른 계약을 암묵적으로 만들 위험이 있습니다. 기본적인 save, delete, update 메서드를 선언하거나 TODO로 남겨 주세요.

src/main/java/konkuk/thip/room/adapter/out/persistence/CategoryJpaRepository.java (1)

1-3: 패키지 이동 확인 완료

패키지·import 경로가 bookroom 으로 일관되게 수정되었습니다. Spring Data JPA 인터페이스이므로 애노테이션이 없어도 동작은 하지만, 명시적으로 @Repository 를 달아 두면 컴포넌트 스캔·IDE ​​내 검색/네이밍에서 이점이 있습니다. 필요 여부를 팀 컨벤션에 따라 결정해 주세요.

src/main/java/konkuk/thip/record/adapter/out/mapper/RecordMapper.java (1)

1-4: Record 도메인 분리 적용 확인 — 교차 도메인 의존성 재검토 권장

패키지·import 정리가 완료되었습니다. 다만 여전히 RoomJpaEntity 를 의존하고 있어 recordroom 간 결합이 생깁니다. 도메인 간 참조가 설계상 필수인지, 또는 별도 포트/서비스 계층을 통해 우회할 수 있는지 한번 점검해 보세요.

src/main/java/konkuk/thip/record/adapter/in/web/request/DummyRequest.java (1)

5-7: 빈 DTO에 @Getter 적용은 불필요합니다
현재 필드가 전혀 없으므로 Lombok @Getter가 생성할 메서드가 없습니다. 불필요한 애너테이션은 컴파일 타임 의존성을 늘리고 가독성을 떨어뜨릴 수 있으니, 실제 필드가 생길 때까지 제거를 권장합니다.

-@Getter
-public class DummyRequest {
-}
+public class DummyRequest {
+}
src/main/java/konkuk/thip/record/adapter/in/web/response/DummyResponse.java (1)

3-7: @Getter 애노테이션은 빈(空) DTO 에서는 불필요합니다.

필드가 하나도 없으므로 Lombok 이 생성할 게 없습니다.
불필요한 애노테이션‧클래스가 늘어나면 컴파일 타임에 쓸데없는 로딩이 발생하고, “Dummy”라는 이름도 실제 비즈니스 코드에 남아 있으면 유지보수 시 혼란을 줄 수 있습니다.

-@Getter
-public class DummyResponse {
-}
+public final class DummyResponse {
+    // TODO: 필드가 생기면 Lombok 애노테이션 추가를 재검토하세요.
+}
src/main/java/konkuk/thip/vote/adapter/out/mapper/VoteMapper.java (1)

1-6: VoteMapperRoomJpaEntity 에 직접 의존하면서 도메인 분리가 반쪽짜리가 되었습니다.

vote → room 로의 직접 의존은 계층 간 결합도를 높여 “투표” 모듈 단독 테스트/재사용을 어렵게 만듭니다.
포트를 통한 의존 역전(예: RoomQueryPort) 또는 ID 만 전달받아 어댑터 계층에서 조회하도록 리팩터링을 고려해 주세요.

src/main/java/konkuk/thip/vote/adapter/out/jpa/VoteJpaEntity.java (1)

4-6: 패키지 이동은 완료됐지만 모듈 간 순환 의존 가능성을 확인하세요.

VoteJpaEntityPostJpaEntity(post 모듈)·RoomJpaEntity(room 모듈)를 동시에 참조합니다.
모듈 그래프에 순환이 생기면 빌드/배포 단계에서 장애가 발생할 수 있으니 gradle java-platform 또는 jdepend 등으로 의존성 검사를 추가하는 것을 권장드립니다.

src/main/java/konkuk/thip/vote/adapter/in/web/request/DummyRequest.java (1)

5-7: 의미 없는 @Getter 애너테이션 삭제 검토
현재 클래스에는 필드가 없어서 Lombok @Getter가 생성할 메서드가 없습니다. 불필요한 애너테이션은 추후 유지보수 시 혼란을 줄 수 있으므로 제거하거나, 곧 추가될 필드를 주석 등으로 명시해 두면 좋겠습니다.

src/main/java/konkuk/thip/vote/application/port/in/dto/DummyCommand.java (1)

6-10: Builder/Getter가 생성할 대상이 없습니다
필드가 없는 상태에서 @Builder@Getter를 선언하면 실제로 생성되는 코드가 없어 무의미합니다.
• 빈 DTO를 유지할 계획이라면 애너테이션을 제거하세요.
• 곧 필드가 추가될 예정이라면 TODO 형태로 명시해 주면 혼동을 줄일 수 있습니다.

src/main/java/konkuk/thip/saved/application/port/in/dto/DummyResult.java (1)

6-10: 불필요 애너테이션 및 빈 DTO
@Builder, @Getter가 현재는 역할이 없습니다. 위 두 애너테이션을 유지하려면 최소 한 개 이상의 필드가 필요합니다. 추후 사용 계획에 따라 정리 바랍니다.

src/main/java/konkuk/thip/record/application/port/in/dto/DummyResult.java (1)

6-10: 필드 없는 DTO → 의미 불분명
필드가 전무한 DTO 는 실제 비즈니스 반환값이 생기기 전까지는 테스트나 문서에서 혼란을 줄 수 있습니다. 간단한 TODO 주석이라도 남겨 향후 확장 의도를 명시해 주세요.

src/main/java/konkuk/thip/saved/application/port/in/dto/DummyQuery.java (1)

6-9: DummyQuery 클래스—빌더 패턴의 실효성 부족
필드가 없으면 Lombok @Builder는 무용지물입니다. 실제 파라미터가 확정되기 전까지는 @Builder 제거가 가독성 측면에서 더 낫습니다.

src/main/java/konkuk/thip/saved/application/port/in/dto/DummyCommand.java (1)

6-10: 동일 패턴 반복—공통 템플릿화 고려
DummyCommand/Query/Result 클래스들이 여러 모듈에 복제되고 있습니다. 스캐폴딩용이라면 gradle 플러그인 또는 코드 생성 템플릿으로 관리해 duplication 을 줄이는 방안을 검토해 주세요.

src/main/java/konkuk/thip/saved/adapter/out/mapper/SavedFeedMapper.java (1)

12-17: toJpaEntity에서 생성 시 중복 저장 위험
SavedFeedJpaEntity.builder() 호출 시 동일 사용자·피드 조합이 이미 존재하면 Unique 제약 위반 가능성이 있습니다. 서비스 계층이 아닌 매퍼 레벨에서 중복 체크 로직을 넣을 수 없지만, 주석으로라도 제약 조건을 명확히 해 두면 좋겠습니다.

src/main/java/konkuk/thip/vote/application/port/in/dto/DummyQuery.java (1)

1-9: 빈 DTO 에 @Builder/@Getter 적용 – 불필요 코드 가능성
필드가 하나도 없는 DTO 는 실제 호출 시 전달할 데이터가 없고, Lombok @Builder 또한 의미가 없습니다.

  1. 추후 필드 추가 계획이 있다면 TODO 주석으로 의도 를 명시하거나,
  2. 당장 사용 계획이 없다면 클래스를 제거하여 불필요한 노이즈를 줄이는 편을 권장드립니다.
src/main/java/konkuk/thip/saved/application/service/SavedFeedService.java (1)

1-9: 비어 있는 Service 구현 – 구현 계획 명시 필요
현재 클래스에는 담당 유스케이스나 메서드가 없습니다. 스캐폴딩 단계라면 // TODO 주석으로 역할을 명시하거나, 실제 구현 전까지는 테스트 코드에서 mock 으로 대체해도 충분합니다. 빈 서비스가 남아 있으면 “Bean is not used” 정적 분석 경고가 발생할 수 있습니다.

src/main/java/konkuk/thip/record/application/port/in/dto/DummyQuery.java (1)

1-9: Record 모듈 Dummy DTO 도 동일 이슈
Vote 모듈과 마찬가지로 필드가 전무하여 @Builder 의 가치가 없습니다. 필요성 재검토 혹은 TODO 주석으로 향후 계획을 명시해 주세요.

src/test/java/konkuk/thip/domain/room/adapter/out/jpa/RecordJpaEntityTest.java (1)

6-10: import 경로 수정은 적절하나 불필요한 혼재 가능성 점검 필요
CategoryJpaEntityroom 패키지로 이동한 것은 맞지만, 동일 테스트 클래스에서 book, room, record 세 도메인의 엔티티를 동시에 다루고 있어 단일 책임이 흐려집니다. 테스트 목적을 ‘Record 저장 및 조회’로 한정한다면 Book/Category 초기화 로직을 별 헬퍼 클래스로 분리하거나 Fixture 유틸을 두는 쪽이 깔끔합니다.

src/main/java/konkuk/thip/record/application/port/in/dto/DummyCommand.java (1)

6-10: 빈 DTO 클래스의 존재 이유를 명확히 해 주세요
필드가 전무한 DummyCommand는 현재 아무 정보도 전달하지 못합니다. 실제 사용 계획이 없다면 제거하시고, 스켈레톤용이라면 TODO 주석으로 향후 필드를 명시하거나 최소한 설명 Javadoc을 추가해 의도를 드러내 주세요.

src/main/java/konkuk/thip/vote/application/port/in/dto/DummyResult.java (1)

6-10: 빈 DTO 유지 시 의도 명시 필요
DummyResult 역시 필드가 없어 응답 객체로서 기능이 없습니다. 실 구현 전에 임시로 두는 것이라면 주석으로 계획을 남기거나, 필요 시점까지 커밋에서 제외해 코드 노이즈를 줄이는 것을 권장합니다.

src/main/java/konkuk/thip/saved/adapter/in/web/SavedBookQueryController.java (1)

6-10: 엔드포인트 및 책임 정의가 필요합니다
REST 컨트롤러가 빈 상태로 머지되면 Swagger·SpringDoc 등 API 문서에도 노이즈만 발생합니다. 최소한 @RequestMapping("/saved-books") 같은 base path 와 TODO 메서드 주석을 추가해 개발자에게 향후 구현 범위를 알리는 편이 좋습니다.

src/main/java/konkuk/thip/record/adapter/in/web/RecordCommandController.java (1)

6-10: 빈 Command 컨트롤러의 목적 설명 필요
RecordCommandController도 마찬가지로 실제 커맨드 핸들링 메서드가 전혀 없습니다. 다른 PR에서 구현 예정이라면 Javadoc·TODO 로드맵을 삽입하거나, 초안이라도 POST /records 메서드 시그니처를 정의해 두면 추후 작업 충돌을 줄일 수 있습니다.

src/main/java/konkuk/thip/record/adapter/in/web/RecordQueryController.java (1)

6-10: 빈 컨트롤러는 URL 매핑 없이 Bean 만 생성됩니다

현재 클래스가 빈 상태라 실제로 노출되는 엔드포인트가 없습니다.
초기 스켈레톤이라면 최소한 기본 URL 프리픽스와 TODO 주석을 추가해 두는 것이 유지보수에 도움이 됩니다.

 @RestController
 @RequiredArgsConstructor
-public class RecordQueryController {
+@RequestMapping("/records")
+public class RecordQueryController {
+
+    // TODO: 조회 API 구현
+
 }
src/main/java/konkuk/thip/vote/adapter/in/web/VoteCommandController.java (1)

6-10: 명령용 컨트롤러도 매핑 정보가 없습니다

서비스 로직이 아직 비어 있더라도, 도메인별 API 스펙을 명확히 하기 위해 기본 경로를 선언해 두는 것을 권장합니다.

 @RestController
 @RequiredArgsConstructor
-public class VoteCommandController {
+@RequestMapping("/votes")
+public class VoteCommandController {
+
+    // TODO: 명령 API 구현
+
 }
src/main/java/konkuk/thip/vote/adapter/in/web/VoteQueryController.java (1)

6-10: 조회용 컨트롤러 역시 엔드포인트가 정의되지 않았습니다

VoteCommandController와 동일한 이유로, 기본 경로 및 TODO를 명시해 두면 이후 작업자가 의도를 파악하기 쉽습니다.

 @RestController
 @RequiredArgsConstructor
-public class VoteQueryController {
+@RequestMapping("/votes")
+public class VoteQueryController {
+
+    // TODO: 조회 API 구현
+
 }
src/main/java/konkuk/thip/vote/application/service/VoteService.java (1)

7-11: 비어 있는 서비스 + @RequiredArgsConstructor는 과합니다

현재 필드가 없어 주입할 의존성도 없는데 @RequiredArgsConstructor를 붙이면 불필요한 생성자가 만들어집니다.
의존성이 생길 때까지는 제거해 두는 편이 깔끔합니다.

-@Service
-@RequiredArgsConstructor
-public class VoteService implements DummyUseCase {
-
-}
+@Service
+public class VoteService implements DummyUseCase {
+    // TODO: 비즈니스 로직 구현
+}
src/main/java/konkuk/thip/saved/adapter/in/web/SavedBookCommandController.java (1)

6-10: 빈 컨트롤러 클래스에 대한 구현 계획이 필요합니다.

현재 SavedBookCommandController는 적절한 어노테이션을 가지고 있지만 실제 기능이 구현되어 있지 않습니다. 패키지 재구성의 일환으로 생성된 스켈레톤 클래스로 보이는데, 향후 구현 계획을 명확히 하기 위해 TODO 주석이나 이슈 트래킹을 추가하는 것을 권장합니다.

 @RestController
 @RequiredArgsConstructor
 public class SavedBookCommandController {
+    // TODO: Implement saved book command operations
+    // - POST /saved/books
+    // - PUT /saved/books/{id}  
+    // - DELETE /saved/books/{id}
 
 }
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 510e1a2 and 538d501.

📒 Files selected for processing (133)
  • src/main/java/konkuk/thip/attendanceCheck/adapter/in/web/AttendanceCheckCommandController.java (1 hunks)
  • src/main/java/konkuk/thip/attendanceCheck/adapter/in/web/AttendanceCheckQuerydController.java (1 hunks)
  • src/main/java/konkuk/thip/attendanceCheck/adapter/in/web/request/UserSignupRequest.java (1 hunks)
  • src/main/java/konkuk/thip/attendanceCheck/adapter/in/web/response/DummyResponse.java (1 hunks)
  • src/main/java/konkuk/thip/attendanceCheck/adapter/out/jpa/AttendanceCheckJpaEntity.java (1 hunks)
  • src/main/java/konkuk/thip/attendanceCheck/adapter/out/mapper/AttendanceCheckMapper.java (1 hunks)
  • 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/AttendanceCheckRepository.java (1 hunks)
  • src/main/java/konkuk/thip/attendanceCheck/application/port/in/DummyUseCase.java (1 hunks)
  • src/main/java/konkuk/thip/attendanceCheck/application/port/in/dto/DummyCommand.java (1 hunks)
  • src/main/java/konkuk/thip/attendanceCheck/application/port/in/dto/DummyQuery.java (1 hunks)
  • src/main/java/konkuk/thip/attendanceCheck/application/port/in/dto/DummyResult.java (1 hunks)
  • src/main/java/konkuk/thip/attendanceCheck/application/port/out/AttendanceCheckCommandPort.java (1 hunks)
  • src/main/java/konkuk/thip/attendanceCheck/application/port/out/AttendnaceCheckQueryPort.java (1 hunks)
  • src/main/java/konkuk/thip/attendanceCheck/application/service/AttendanceCheckService.java (1 hunks)
  • src/main/java/konkuk/thip/attendanceCheck/domain/AttendanceCheck.java (1 hunks)
  • src/main/java/konkuk/thip/comment/adapter/out/jpa/CommentJpaEntity.java (1 hunks)
  • src/main/java/konkuk/thip/comment/adapter/out/mapper/CommentMapper.java (1 hunks)
  • src/main/java/konkuk/thip/feed/adapter/out/jpa/FeedJpaEntity.java (1 hunks)
  • src/main/java/konkuk/thip/feed/adapter/out/jpa/TagJpaEntity.java (1 hunks)
  • src/main/java/konkuk/thip/feed/adapter/out/mapper/TagMapper.java (1 hunks)
  • src/main/java/konkuk/thip/notification/adapter/in/web/NotificationCommandController.java (1 hunks)
  • src/main/java/konkuk/thip/notification/adapter/in/web/NotificationQueryController.java (1 hunks)
  • src/main/java/konkuk/thip/notification/adapter/in/web/request/UserSignupRequest.java (1 hunks)
  • src/main/java/konkuk/thip/notification/adapter/in/web/response/DummyResponse.java (1 hunks)
  • src/main/java/konkuk/thip/notification/adapter/out/jpa/NotificationJpaEntity.java (1 hunks)
  • src/main/java/konkuk/thip/notification/adapter/out/mapper/NotificationMapper.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/NotificationJpaRepository.java (1 hunks)
  • src/main/java/konkuk/thip/notification/adapter/out/persistence/NotificationQueryPersistenceAdapter.java (1 hunks)
  • src/main/java/konkuk/thip/notification/application/port/in/DummyUseCase.java (1 hunks)
  • src/main/java/konkuk/thip/notification/application/port/in/dto/DummyCommand.java (1 hunks)
  • src/main/java/konkuk/thip/notification/application/port/in/dto/DummyQuery.java (1 hunks)
  • src/main/java/konkuk/thip/notification/application/port/in/dto/DummyResult.java (1 hunks)
  • src/main/java/konkuk/thip/notification/application/port/out/NotificationCommandPort.java (1 hunks)
  • src/main/java/konkuk/thip/notification/application/port/out/NotificationQueryPort.java (1 hunks)
  • src/main/java/konkuk/thip/notification/application/service/NotificationService.java (1 hunks)
  • src/main/java/konkuk/thip/notification/domain/Notification.java (1 hunks)
  • src/main/java/konkuk/thip/post/adapter/out/jpa/ContentJpaEntity.java (1 hunks)
  • src/main/java/konkuk/thip/post/adapter/out/jpa/PostJpaEntity.java (1 hunks)
  • src/main/java/konkuk/thip/post/adapter/out/jpa/PostLikeJpaEntity.java (1 hunks)
  • src/main/java/konkuk/thip/post/adapter/out/mapper/ContentMapper.java (1 hunks)
  • src/main/java/konkuk/thip/post/adapter/out/mapper/PostLikeMapper.java (1 hunks)
  • src/main/java/konkuk/thip/post/domain/Content.java (1 hunks)
  • src/main/java/konkuk/thip/post/domain/PostLike.java (1 hunks)
  • src/main/java/konkuk/thip/recentSearch/adapter/in/web/RecentSearchCommandController.java (1 hunks)
  • src/main/java/konkuk/thip/recentSearch/adapter/in/web/RecentSearchQueryController.java (1 hunks)
  • src/main/java/konkuk/thip/recentSearch/adapter/in/web/request/UserSignupRequest.java (1 hunks)
  • src/main/java/konkuk/thip/recentSearch/adapter/in/web/response/DummyResponse.java (1 hunks)
  • src/main/java/konkuk/thip/recentSearch/adapter/out/jpa/RecentSearchJpaEntity.java (1 hunks)
  • src/main/java/konkuk/thip/recentSearch/adapter/out/jpa/SearchType.java (1 hunks)
  • src/main/java/konkuk/thip/recentSearch/adapter/out/mapper/RecentSearchMapper.java (1 hunks)
  • src/main/java/konkuk/thip/recentSearch/application/port/in/DummyUseCase.java (1 hunks)
  • src/main/java/konkuk/thip/recentSearch/application/port/in/dto/DummyCommand.java (1 hunks)
  • src/main/java/konkuk/thip/recentSearch/application/port/in/dto/DummyQuery.java (1 hunks)
  • src/main/java/konkuk/thip/recentSearch/application/port/in/dto/DummyResult.java (1 hunks)
  • src/main/java/konkuk/thip/recentSearch/application/port/out/RecentSearcCommandPort.java (1 hunks)
  • src/main/java/konkuk/thip/recentSearch/application/port/out/RecentSearcQueryPort.java (1 hunks)
  • src/main/java/konkuk/thip/recentSearch/application/service/RecentSearchService.java (1 hunks)
  • src/main/java/konkuk/thip/recentSearch/domain/RecentSearch.java (1 hunks)
  • src/main/java/konkuk/thip/record/adapter/in/web/RecordCommandController.java (1 hunks)
  • src/main/java/konkuk/thip/record/adapter/in/web/RecordQueryController.java (1 hunks)
  • src/main/java/konkuk/thip/record/adapter/in/web/request/DummyRequest.java (1 hunks)
  • src/main/java/konkuk/thip/record/adapter/in/web/response/DummyResponse.java (1 hunks)
  • src/main/java/konkuk/thip/record/adapter/out/jpa/RecordJpaEntity.java (1 hunks)
  • src/main/java/konkuk/thip/record/adapter/out/mapper/RecordMapper.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/RecordJpaRepository.java (1 hunks)
  • src/main/java/konkuk/thip/record/adapter/out/persistence/RecordQueryPersistenceAdapter.java (1 hunks)
  • src/main/java/konkuk/thip/record/application/port/in/DummyUseCase.java (1 hunks)
  • src/main/java/konkuk/thip/record/application/port/in/dto/DummyCommand.java (1 hunks)
  • src/main/java/konkuk/thip/record/application/port/in/dto/DummyQuery.java (1 hunks)
  • src/main/java/konkuk/thip/record/application/port/in/dto/DummyResult.java (1 hunks)
  • src/main/java/konkuk/thip/record/application/port/out/RecordCommandPort.java (1 hunks)
  • src/main/java/konkuk/thip/record/application/port/out/RecordQueryPort.java (1 hunks)
  • src/main/java/konkuk/thip/record/application/service/RecordService.java (1 hunks)
  • src/main/java/konkuk/thip/record/domain/Record.java (1 hunks)
  • src/main/java/konkuk/thip/room/adapter/out/jpa/CategoryJpaEntity.java (1 hunks)
  • src/main/java/konkuk/thip/room/adapter/out/jpa/RoomJpaEntity.java (0 hunks)
  • src/main/java/konkuk/thip/room/adapter/out/mapper/CategoryMapper.java (1 hunks)
  • src/main/java/konkuk/thip/room/adapter/out/mapper/RoomMapper.java (1 hunks)
  • src/main/java/konkuk/thip/room/adapter/out/persistence/CategoryJpaRepository.java (1 hunks)
  • src/main/java/konkuk/thip/room/domain/Category.java (1 hunks)
  • src/main/java/konkuk/thip/saved/adapter/in/web/SavedBookCommandController.java (1 hunks)
  • src/main/java/konkuk/thip/saved/adapter/in/web/SavedBookQueryController.java (1 hunks)
  • src/main/java/konkuk/thip/saved/adapter/in/web/SavedFeedCommandController.java (1 hunks)
  • src/main/java/konkuk/thip/saved/adapter/in/web/SavedFeedQueryController.java (1 hunks)
  • src/main/java/konkuk/thip/saved/adapter/in/web/request/UserSignupRequest.java (1 hunks)
  • src/main/java/konkuk/thip/saved/adapter/in/web/response/DummyResponse.java (1 hunks)
  • src/main/java/konkuk/thip/saved/adapter/out/jpa/SavedBookJpaEntity.java (1 hunks)
  • src/main/java/konkuk/thip/saved/adapter/out/jpa/SavedFeedJpaEntity.java (1 hunks)
  • src/main/java/konkuk/thip/saved/adapter/out/mapper/SavedBookMapper.java (1 hunks)
  • src/main/java/konkuk/thip/saved/adapter/out/mapper/SavedFeedMapper.java (1 hunks)
  • src/main/java/konkuk/thip/saved/adapter/out/persistence/SavedBookRepository.java (1 hunks)
  • src/main/java/konkuk/thip/saved/adapter/out/persistence/SavedCommandPersistenceAdapter.java (1 hunks)
  • src/main/java/konkuk/thip/saved/adapter/out/persistence/SavedFeedRepository.java (1 hunks)
  • src/main/java/konkuk/thip/saved/adapter/out/persistence/SavedQueryPersistenceAdapter.java (1 hunks)
  • src/main/java/konkuk/thip/saved/application/port/in/DummyUseCase.java (1 hunks)
  • src/main/java/konkuk/thip/saved/application/port/in/dto/DummyCommand.java (1 hunks)
  • src/main/java/konkuk/thip/saved/application/port/in/dto/DummyQuery.java (1 hunks)
  • src/main/java/konkuk/thip/saved/application/port/in/dto/DummyResult.java (1 hunks)
  • src/main/java/konkuk/thip/saved/application/port/out/SavedCommandPort.java (1 hunks)
  • src/main/java/konkuk/thip/saved/application/port/out/SavedQueryPort.java (1 hunks)
  • src/main/java/konkuk/thip/saved/application/service/SavedBookService.java (1 hunks)
  • src/main/java/konkuk/thip/saved/application/service/SavedFeedService.java (1 hunks)
  • src/main/java/konkuk/thip/saved/domain/SavedBook.java (1 hunks)
  • src/main/java/konkuk/thip/saved/domain/SavedFeed.java (1 hunks)
  • src/main/java/konkuk/thip/user/adapter/out/jpa/UserVoteJpaEntity.java (1 hunks)
  • src/main/java/konkuk/thip/user/adapter/out/mapper/UserVoteMapper.java (1 hunks)
  • src/main/java/konkuk/thip/vote/adapter/in/web/VoteCommandController.java (1 hunks)
  • src/main/java/konkuk/thip/vote/adapter/in/web/VoteQueryController.java (1 hunks)
  • src/main/java/konkuk/thip/vote/adapter/in/web/request/DummyRequest.java (1 hunks)
  • src/main/java/konkuk/thip/vote/adapter/in/web/response/DummyResponse.java (1 hunks)
  • src/main/java/konkuk/thip/vote/adapter/out/jpa/VoteItemJpaEntity.java (1 hunks)
  • src/main/java/konkuk/thip/vote/adapter/out/jpa/VoteJpaEntity.java (1 hunks)
  • src/main/java/konkuk/thip/vote/adapter/out/mapper/VoteItemMapper.java (1 hunks)
  • src/main/java/konkuk/thip/vote/adapter/out/mapper/VoteMapper.java (1 hunks)
  • src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteCommandPersistenceAdapter.java (1 hunks)
  • src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteJpaRepository.java (1 hunks)
  • src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteQueryPersistenceAdapter.java (1 hunks)
  • src/main/java/konkuk/thip/vote/application/port/in/DummyUseCase.java (1 hunks)
  • src/main/java/konkuk/thip/vote/application/port/in/dto/DummyCommand.java (1 hunks)
  • src/main/java/konkuk/thip/vote/application/port/in/dto/DummyQuery.java (1 hunks)
  • src/main/java/konkuk/thip/vote/application/port/in/dto/DummyResult.java (1 hunks)
  • src/main/java/konkuk/thip/vote/application/port/out/VoteCommandPort.java (1 hunks)
  • src/main/java/konkuk/thip/vote/application/port/out/VoteQueryPort.java (1 hunks)
  • src/main/java/konkuk/thip/vote/application/service/VoteService.java (1 hunks)
  • src/main/java/konkuk/thip/vote/domain/Vote.java (1 hunks)
  • src/main/java/konkuk/thip/vote/domain/VoteItem.java (1 hunks)
  • src/test/java/konkuk/thip/domain/room/adapter/out/jpa/RecordJpaEntityTest.java (1 hunks)
  • src/test/java/konkuk/thip/domain/room/adapter/out/jpa/RoomJpaEntityTest.java (1 hunks)
  • src/test/java/konkuk/thip/domain/room/adapter/out/jpa/VoteJpaEntityTest.java (1 hunks)
💤 Files with no reviewable changes (1)
  • src/main/java/konkuk/thip/room/adapter/out/jpa/RoomJpaEntity.java
🔇 Additional comments (59)
src/main/java/konkuk/thip/recentSearch/adapter/out/mapper/RecentSearchMapper.java (1)

1-5: 패키지 재구성이 올바르게 수행되었습니다.

user 패키지에서 recentSearch 패키지로의 이동이 적절하게 이루어졌으며, 관련 import 문들도 정확히 업데이트되었습니다. UserJpaEntity가 여전히 user 패키지에서 import되는 것은 도메인 경계를 올바르게 유지하는 것입니다.

src/main/java/konkuk/thip/attendanceCheck/domain/AttendanceCheck.java (1)

11-12: id 필드 중복 여부 확인 필요

BaseDomainEntity에 이미 기본 키(예: id)가 선언돼 있다면 이곳의 private Long id; 선언은 중복‧혼란을 일으킬 수 있습니다.
겹친다면 하위 클래스에서 재선언하지 않고 상위 클래스를 그대로 활용하도록 수정해 주세요.

src/main/java/konkuk/thip/attendanceCheck/adapter/out/mapper/AttendanceCheckMapper.java (1)

12-18: 도메인 → JPA 매핑 필드 누락 여부 확인
AttendanceCheckJpaEntity.builder() 호출 시 id, createdAt, status 등 주요 컬럼이 매핑되지 않았습니다.
JPA가 자동 생성·세팅하도록 설계한 것인지, 누락된 것인지 의도 확인이 필요합니다.

src/main/java/konkuk/thip/attendanceCheck/adapter/out/persistence/AttendanceCheckRepository.java (1)

6-7: 표준적인 JPA 레포지토리 인터페이스 구현

Spring Data JPA의 표준 패턴을 올바르게 따르고 있으며, 엔티티 타입과 ID 타입이 적절히 지정되어 있습니다.

src/main/java/konkuk/thip/attendanceCheck/adapter/out/persistence/AttendanceCheckCommandPersistenceAdapter.java (1)

10-15: 다음 스크립트를 실행하여 AttendanceCheckCommandPort 인터페이스의 위치와 메서드 정의를 확인해주세요:

#!/bin/bash
# AttendanceCheckCommandPort 인터페이스 위치 및 메서드 내용 확인
interface_file=$(rg --files-with-matches "interface AttendanceCheckCommandPort" -n . | cut -d: -f1 | head -1)
if [ -n "$interface_file" ]; then
  echo "Interface file: $interface_file"
  # 인터페이스 선언부터 닫는 중괄호까지 출력
  sed -n '/interface AttendanceCheckCommandPort/,/}/p' "$interface_file"
else
  echo "AttendanceCheckCommandPort 인터페이스 파일을 찾을 수 없습니다."
fi
src/main/java/konkuk/thip/notification/adapter/out/persistence/NotificationJpaRepository.java (1)

3-6: @Repository 어노테이션은 선택적입니다

Spring Data JPA가 자동으로 프록시-빈을 등록하므로 NotificationJpaRepository에 별도 애노테이션은 필요 없습니다. 현재 코드에 문제는 없으니 참고만 해주세요.

src/main/java/konkuk/thip/notification/domain/Notification.java (1)

9-13: BaseDomainEntity에 id 필드 선언 여부 확인을 위해 아래 스크립트를 실행합니다.

#!/bin/bash
# BaseDomainEntity 정의 및 필드 확인
rg "class BaseDomainEntity" -n -A10
src/main/java/konkuk/thip/notification/adapter/out/jpa/NotificationJpaEntity.java (1)

14-19: BaseJpaEntity에 정의된 PK(@Id) 필드를 확인하기 위해 다음 스크립트를 실행해주세요.

#!/bin/bash
# BaseJpaEntity 클래스 파일 경로 및 내용 확인
FILE=$(rg --files-with-matches "class BaseJpaEntity" | head -n1)
echo "Found BaseJpaEntity at: $FILE"
echo "----- File Content (first 200 lines) -----"
sed -n '1,200p' "$FILE"
echo "----- @Id annotations in BaseJpaEntity -----"
rg -n "@Id" "$FILE"
src/main/java/konkuk/thip/notification/application/service/NotificationService.java (1)

7-11: NotificationService가 구현 중인 DummyUseCase 인터페이스에 실제 메서드가 정의되어 있는지 확인하기 위해 해당 파일 내용을 출력하는 스크립트를 실행해 주세요.

#!/bin/bash
sed -n '1,200p' src/main/java/konkuk/thip/notification/application/port/in/DummyUseCase.java
src/main/java/konkuk/thip/notification/adapter/out/persistence/NotificationCommandPersistenceAdapter.java (1)

12-12: 필드명 일관성 확인 필요

다른 persistence adapter와 비교해서 필드명의 일관성을 확인해주세요. NotificationQueryPersistenceAdapter에서는 jpaRepository로 명명되어 있습니다.

#!/bin/bash
# 다른 persistence adapter들의 필드명 패턴을 확인
rg -A 5 "private final.*JpaRepository" --type java
src/main/java/konkuk/thip/record/adapter/out/persistence/RecordJpaRepository.java (1)

1-7: JpaRepository 선언만으로 충분합니다.

패키지 리팩터링 후 경로가 일관되며, 추가 설정 없이 스프링이 자동으로 빈 등록을 수행하므로 문제없습니다.

src/main/java/konkuk/thip/room/domain/Category.java (2)

1-1: 패키지 이동 확인 완료
book.domainroom.domain 으로의 이동이 설계 의도(도메인별 패키지 분리)에 부합하며, 클래스 내부 로직 변경이 없으므로 별다른 이슈는 없습니다.


1-1: 잔존 import / 참조 점검 권장
혹시 남아 있을 수 있는 예전 패키지(konkuk.thip.book.domain.Category) 참조를 전량 제거했는지 확인해 주세요.

#!/bin/bash
# 변경 전 패키지 경로를 여전히 참조하는 곳이 없는지 검색
rg --no-heading -n $'konkuk\\.thip\\.book\\.domain\\.Category'
src/main/java/konkuk/thip/post/domain/PostLike.java (1)

1-1: 패키지 네임스페이스 정정 확인
room.domainpost.domain 으로의 이동으로 게시글 라이크가 올바른 바운디드 컨텍스트에 배치되었습니다. 변경 자체는 문제없습니다.

src/main/java/konkuk/thip/saved/domain/SavedBook.java (1)

1-1: 패키지 리로케이션 문제없음
saved.domain 으로 이동되어 기능별 패키지 구조가 명확해졌습니다.

src/main/java/konkuk/thip/saved/domain/SavedFeed.java (1)

1-1: 패키지 리로케이션 문제없음
위와 동일하게 구조가 정돈되었습니다.

src/main/java/konkuk/thip/post/domain/Content.java (1)

1-1: 패키지 네임스페이스 정정 확인
room.domainpost.domain 이동이 확인되었습니다.

src/main/java/konkuk/thip/post/adapter/out/jpa/ContentJpaEntity.java (1)

1-1: 아직 와일드카드 임포트(import konkuk.thip.room.adapter.out.jpa.*) 등 다른 형태의 참조가 남아있을 수 있으니, 패키지 경로 전체를 검색해 보겠습니다.

#!/bin/bash
# 이전 패키지 전체 경로를 참조하는 구문 탐색
rg 'konkuk\.thip\.room\.adapter\.out\.jpa'
src/main/java/konkuk/thip/post/adapter/out/jpa/PostLikeJpaEntity.java (1)

1-1: 추가 검증: PostLikeJpaEntity가 다른 파일에서 import 되는지 확인합니다.

#!/bin/bash
rg -n "import.*PostLikeJpaEntity"
src/main/java/konkuk/thip/room/adapter/out/jpa/CategoryJpaEntity.java (1)

1-1: 패키지 이동 후 잔존 import 확인 필요
book.adapter.out.jparoom.adapter.out.jpa 로 이동된 만큼, 다른 파일에서의 기존 import 잔재 여부를 점검해 주세요.

src/main/java/konkuk/thip/room/adapter/out/mapper/RoomMapper.java (1)

4-4: 패키지 경로 수정 확인 완료
CategoryJpaEntity import 경로가 올바르게 수정되었습니다.

src/main/java/konkuk/thip/vote/adapter/out/jpa/VoteItemJpaEntity.java (1)

1-1: 추가로 다음 스크립트를 실행하여 VoteItemJpaEntity import 구문과 이전 패키지 경로 참조가 남아있는지 확인해 주세요.

#!/bin/bash
# VoteItemJpaEntity를 import 하는 구문 확인
rg -n 'import .*VoteItemJpaEntity'

# 이전 패키지 경로 참조 확인
rg -n 'konkuk\.thip\.room\.adapter\.out\.jpa'
src/main/java/konkuk/thip/comment/adapter/out/mapper/CommentMapper.java (1)

5-5: 올바른 패키지 경로로 수정된 점 확인 완료
PostJpaEntity import 경로가 새로운 도메인 분리에 맞게 수정되었습니다. 추가 조치 필요 없습니다.

src/main/java/konkuk/thip/user/adapter/out/jpa/UserVoteJpaEntity.java (1)

5-5: 패키지 변경 반영 확인 완료
VoteItemJpaEntity import 경로가 vote 모듈로 정상 변경되었습니다.

src/main/java/konkuk/thip/user/adapter/out/mapper/UserVoteMapper.java (1)

6-6: 패키지 정합성 확보
VoteItemJpaEntity의 새 경로로 교체된 것 확인했습니다. 문제 없습니다.

src/main/java/konkuk/thip/saved/adapter/out/jpa/SavedBookJpaEntity.java (1)

1-1: 패키지 이동은 OK, 하지만 마이그레이션 체크 필요

엔티티가 user 도메인에서 saved 도메인으로 이동했습니다.
이 변경으로 JPQL, Criteria, Mapper 등 기존 경로를 하드코딩한 곳이 없는지 전역 검색을 통해 확인해 주세요.

src/test/java/konkuk/thip/domain/room/adapter/out/jpa/RoomJpaEntityTest.java (1)

6-8: 패키지 리팩터링 반영 확인 완료
CategoryJpaEntity/Repository의 패키지 경로가 room으로 올바르게 수정되었습니다. 추가 수정 사항은 필요 없어 보입니다.

src/main/java/konkuk/thip/comment/adapter/out/jpa/CommentJpaEntity.java (1)

5-6: Post 패키지 경로 수정 적절

PostJpaEntity 의 import 가 roompost 로 교정되어 도메인 경계가 명확해졌습니다. 추가 조치 필요 없습니다.

src/main/java/konkuk/thip/post/adapter/out/jpa/PostJpaEntity.java (1)

1-8: 패키지·Lombok import 명시적 변경 👍

도메인 분리에 맞춰 패키지가 post 로 이동했고, lombok.* 와일드카드 대신 명시적 import 로 교체되어 가독성이 향상되었습니다. 특별한 이슈 없습니다.

src/main/java/konkuk/thip/post/adapter/out/mapper/PostLikeMapper.java (1)

1-5: post 도메인으로 패키지 이동 완료

패키지 및 import 교정이 일관되게 반영되었습니다. 추가 수정 사항 없습니다.

src/main/java/konkuk/thip/feed/adapter/out/mapper/TagMapper.java (1)

5-6: 패키지 정정 확인 완료
두 엔티티의 import 경로가 올바르게 수정되었습니다. 추가적인 로직 변경은 없어 기능적으로 문제없습니다.

src/main/java/konkuk/thip/feed/adapter/out/jpa/TagJpaEntity.java (1)

5-6: 패키지 경로 수정 적절
PostJpaEntityCategoryJpaEntity의 위치가 도메인별로 재구성된 패키지와 일치합니다. 별다른 문제 없습니다.

src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteJpaRepository.java (1)

1-3: 패키지 이동에 따른 base-package 스캔 범위 확인 필요
패키지 이동으로 컴포넌트 스캔 경로가 변경되었습니다. @EnableJpaRepositories 또는 Spring Boot spring.data.jpa.repositories.* 설정에서 konkuk.thip.vote 경로가 포함되는지 확인해 주세요.

src/main/java/konkuk/thip/record/adapter/out/jpa/RecordJpaEntity.java (1)

28-34: Builder 인자 순서 가독성 개선 제안
현재 인자 순서가 도메인상 중요도가 높은 page, isOverview 보다 roomJpaEntity가 뒤에 위치합니다. 가독성 향상을 위해 논리적으로 연관된 두 값을 연속 배치하는 것이 좋습니다.
[建议_optional_refactor]

src/main/java/konkuk/thip/saved/adapter/out/jpa/SavedFeedJpaEntity.java (2)

1-1: 패키지 이동 확인 완료
usersaved 로 패키지를 이동하여 모듈 경계를 명확히 한 점 👍


26-27: 컬럼 이름 불일치 가능성 확인 요망
FeedJpaEntity와 매핑된 FK 컬럼명이 "post_id"입니다. 테이블·컬럼 네이밍 규칙상 feed_id가 더 자연스러울 수 있으니 DDL과 일치하는지 확인 바랍니다.

src/main/java/konkuk/thip/saved/adapter/out/mapper/SavedBookMapper.java (1)

1-6: 패키지 리네이밍 정상 반영 확인
usersaved 로 경로 및 import가 일관되게 수정되었습니다. 다른 클래스들에서도 동일하게 반영되었는지 전역 검색으로 한번 더 확인 부탁드립니다.

src/main/java/konkuk/thip/room/adapter/out/mapper/CategoryMapper.java (1)

1-4: 패키지·임포트 경로 변경 문제 없음, 단 전역 참조 검증 필요
bookroom 모듈로의 이동이 깔끔하게 반영되었습니다. 다만 동일 클래스를 참조하던 다른 레이어(서비스, 어댑터, 테스트 등)에서 아직 konkuk.thip.book… 경로를 사용하고 있지 않은지 한 번 더 전역 검색해 주세요.

src/main/java/konkuk/thip/saved/adapter/out/mapper/SavedFeedMapper.java (1)

1-5: 패키지 이동 LGTM, 그러나 캐시·빈 스캔 범위 확인
usersaved 로 이동하면서 스프링 컴포넌트 스캔 경로가 바뀌었습니다. @ComponentScan basePackages 설정이 서브패키지를 포함하도록 되어 있는지 확인 바랍니다.

src/main/java/konkuk/thip/post/adapter/out/mapper/ContentMapper.java (2)

1-5: 패키지·임포트 경로 리팩터링 문제 없음
roompost 네임스페이스로의 이동이 일관성 있게 반영되었습니다. 다른 클래스·설정 파일들과 충돌이 없는지만 한 번 더 빌드로 확인하면 충분합니다.


22-24: targetPostId 매핑 필드명 확인 필요
contentJpaEntity.getPostJpaEntity().getPostId() 결과를 targetPostId에 그대로 매핑하고 있습니다.
만약 Post 와 Content 가 1:N 관계로만 연결되고 별도 도메인 ID 를 쓰지 않는 구조라면 문제없지만, 향후 Post 외 다른 엔티티를 참조해야 하는 시나리오(예: Board, Article 등)가 있다면 의미가 모호해질 수 있습니다. DTO/도메인 레이어에서 명확히 구분되는 필드명을 사용하는지 검증해 주세요.

src/main/java/konkuk/thip/vote/adapter/out/mapper/VoteItemMapper.java (2)

1-5: 패키지·임포트 경로 리팩터링 문제 없음
roomvote 네임스페이스로 이동이 정상적으로 반영되었습니다.


24-24: voteId 매핑 시 getPostId() 호출 – 네이밍 불일치 가능성
voteItemJpaEntity.getVoteJpaEntity().getPostId()voteId 로 설정하고 있습니다. VoteJpaEntity 에 실제로 getPostId() 메서드가 존재하는지, 아니면 리팩터링 과정에서 getVoteId() 로 이름이 변경돼야 하는지 확인 바랍니다. 네이밍 불일치가 계속되면 JPA 매핑 또는 도메인 객체간 연관관계가 깨질 수 있습니다.

src/test/java/konkuk/thip/domain/room/adapter/out/jpa/VoteJpaEntityTest.java (2)

16-17: 새 패키지 경로로의 import 교체 확인 완료

VoteJpaEntity, VoteJpaRepository import를 vote 패키지로 옮긴 점 👍
컴파일 오류 없이 전체 테스트가 통과하는지만 한 번 더 확인해 주세요.


1-1: 생산 코드의 VoteJpaEntity.java 위치와 패키지 선언을 확인하기 위해 아래 스크립트를 실행해 주세요:

#!/bin/bash
set -e
# src/main/java 경로에서 VoteJpaEntity.java를 찾고 상위 5개 라인을 출력합니다.
FILES=$(fd -e java VoteJpaEntity.java src/main/java)
if [ -z "$FILES" ]; then
  echo "VoteJpaEntity.java를 찾을 수 없습니다."
  exit 1
fi
for FILE in $FILES; do
  echo "경로: $FILE"
  head -n 5 "$FILE"
done
src/main/java/konkuk/thip/saved/adapter/out/persistence/SavedFeedRepository.java (1)

6-7: 표준 JPA 리포지토리 구현이 올바릅니다.

SavedFeedRepository는 Spring Data JPA의 표준 패턴을 올바르게 따르고 있으며, 기본적인 CRUD 및 페이징 기능을 제공합니다. 향후 커스텀 쿼리가 필요한 경우 메서드를 추가할 수 있습니다.

src/main/java/konkuk/thip/saved/adapter/out/persistence/SavedBookRepository.java (1)

6-7: 표준 JPA 리포지토리 구현이 올바릅니다.

SavedBookRepository는 Spring Data JPA의 표준 패턴을 올바르게 따르고 있으며, SavedBookJpaEntity에 대한 기본적인 CRUD 및 페이징 기능을 제공합니다.

src/main/java/konkuk/thip/record/adapter/out/persistence/RecordQueryPersistenceAdapter.java (1)

8-15: 도메인별 패키지 구조 개선이 잘 적용됨

헥사고날 아키텍처 패턴에 따른 어댑터 구조가 일관성 있게 적용되었습니다. 빈 구현체는 리팩토링 과정에서 의도된 것으로 보입니다.

src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteQueryPersistenceAdapter.java (1)

12-12: VoteJpaRepository 임포트 누락으로 컴파일 오류 발생

VoteJpaRepository에 대한 임포트 구문이 누락되어 컴파일이 실패합니다.

다음 diff를 적용하여 누락된 임포트를 추가하세요:

+import konkuk.thip.vote.adapter.out.persistence.VoteJpaRepository;

Likely an incorrect or invalid review comment.

src/main/java/konkuk/thip/vote/adapter/out/persistence/VoteCommandPersistenceAdapter.java (1)

12-12: VoteJpaRepository 임포트 누락으로 컴파일 오류 발생

VoteJpaRepository에 대한 임포트 구문이 누락되어 컴파일이 실패합니다.

다음 diff를 적용하여 누락된 임포트를 추가하세요:

+import konkuk.thip.vote.adapter.out.persistence.VoteJpaRepository;

Likely an incorrect or invalid review comment.

src/main/java/konkuk/thip/saved/adapter/out/persistence/SavedCommandPersistenceAdapter.java (2)

9-18: 도메인별 패키지 재구성이 체계적으로 적용됨

여러 엔티티(Book, Feed)를 처리하는 복합 어댑터 구조가 일관성 있게 설계되었습니다. 헥사고날 아키텍처 패턴을 잘 따르고 있습니다.


13-14: Repository 클래스들의 임포트 누락으로 컴파일 오류 발생

SavedBookRepository와 SavedFeedRepository에 대한 임포트 구문이 누락되어 컴파일이 실패합니다.

다음 diff를 적용하여 누락된 임포트들을 추가하세요:

+import konkuk.thip.saved.adapter.out.persistence.SavedBookRepository;
+import konkuk.thip.saved.adapter.out.persistence.SavedFeedRepository;

Likely an incorrect or invalid review comment.

src/main/java/konkuk/thip/saved/adapter/out/persistence/SavedQueryPersistenceAdapter.java (1)

1-10: Clean Architecture 패턴을 잘 따르고 있습니다.

패키지 구조와 어댑터 명명이 헥사고날 아키텍처 원칙에 잘 부합하며, Spring의 @Repository와 Lombok의 @RequiredArgsConstructor 사용도 적절합니다.

src/main/java/konkuk/thip/feed/adapter/out/jpa/FeedJpaEntity.java (6)

6-6: 패키지 경로 수정이 올바르게 적용되었습니다.

room 패키지에서 post 패키지로의 import 경로 변경이 도메인 단위 패키지 재구성 목적에 부합합니다.


8-11: Lombok import 개선사항을 잘 적용했습니다.

와일드카드 import에서 명시적 import로 변경하여 코드의 가독성과 유지보수성이 향상되었습니다.


30-36: Builder 패턴 구현이 적절합니다.

@Builder 어노테이션과 함께 생성자가 올바르게 구현되어 있으며, 상위 클래스 생성자 호출도 정확합니다. 필드 초기화 로직이 깔끔하게 처리되었습니다.


6-6: 패키지 경로 수정이 올바르게 적용되었습니다.

PostJpaEntity import 경로가 room 패키지에서 post 패키지로 정확히 수정되어 도메인별 패키지 분리 목적에 부합합니다.


8-11: Lombok import 명시화가 코드 가독성을 향상시켰습니다.

wildcard import에서 명시적 import로 변경하여 사용되는 Lombok 기능을 명확히 하였습니다. 코드 가독성과 유지보수성이 개선되었습니다.


30-36: Builder 패턴 생성자가 적절히 구현되었습니다.

생성자에서 부모 클래스의 생성자를 올바르게 호출하고, 모든 필드를 적절히 초기화하고 있습니다. Builder 패턴을 통해 객체 생성의 유연성이 확보되었습니다.

Comment on lines +5 to +7
@Getter
public class UserSignupRequest {
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

DTO가 비어 있어 실질적인 요청 데이터가 없으며, 도메인별 중복 정의 위험 존재

UserSignupRequest가 필드를 전혀 포함하지 않아 요청 본문을 표현하지 못합니다. 현재 PR에서 여러 도메인마다 동일 이름의 클래스를 따로 두고 있는데, 실제 회원가입 정보(예: email, password, nickname 등)를 공통으로 다룬다면 한 곳(예: auth 또는 user 공용 패키지)에 DTO를 두고 재사용하는 편이 유지보수에 유리합니다.
또한 Bean Validation을 적용해 계약을 명확히 해두면 컨트롤러 단에서 즉시 검증이 가능해집니다.

예시 개선안:

 package konkuk.thip.saved.adapter.in.web.request;

 import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotBlank;

 @Getter
-public class UserSignupRequest {
-}
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class UserSignupRequest {
+
+    @Email
+    @NotBlank
+    private String email;
+
+    @NotBlank
+    private String password;
+
+    @NotBlank
+    private String nickname;
+}

이와 같이 필드와 검증 어노테이션을 추가하고, Lombok으로 생성자/빌더를 제공하면 컨트롤러‒서비스 계층에서 바로 활용할 수 있습니다.
필드 정의가 결정되지 않았다면 최소한 // TODO 주석으로 명시해 두시는 것을 권장드립니다.

📝 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.

Suggested change
@Getter
public class UserSignupRequest {
}
package konkuk.thip.saved.adapter.in.web/request;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserSignupRequest {
@Email
@NotBlank
private String email;
@NotBlank
private String password;
@NotBlank
private String nickname;
}
🤖 Prompt for AI Agents
In src/main/java/konkuk/thip/saved/adapter/in/web/request/UserSignupRequest.java
around lines 5 to 7, the UserSignupRequest class is empty and lacks fields to
represent actual signup data, which prevents it from capturing request
information and risks duplication across domains. Add relevant fields such as
email, password, and nickname with appropriate Bean Validation annotations to
enforce input constraints. Use Lombok annotations to generate constructors and
builders for easier use in controller and service layers. If fields are not
finalized, include a TODO comment indicating pending field definitions.

Comment on lines +5 to +7
@Getter
public class UserSignupRequest {
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

빈 DTO는 의미가 없습니다
UserSignupRequest가 필드 없이 선언되어 있어 실제 요청 데이터 바인딩이 불가능합니다. 최소한 회원 가입에 필요한 속성(예: email, password, nickname 등)을 정의하고, 역직렬화를 위해 @NoArgsConstructor(access = AccessLevel.PROTECTED) 정도를 추가하는 것이 좋습니다. 사용 계획이 없다면 클래스를 제거해 불필요한 노이즈를 줄여주세요.

 @Getter
-public class UserSignupRequest {
-}
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+@Builder
+public class UserSignupRequest {
+    @NotBlank
+    private String email;
+
+    @NotBlank
+    private String password;
+
+    @NotBlank
+    private String nickname;
+}
📝 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.

Suggested change
@Getter
public class UserSignupRequest {
}
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class UserSignupRequest {
@NotBlank
private String email;
@NotBlank
private String password;
@NotBlank
private String nickname;
}
🤖 Prompt for AI Agents
In
src/main/java/konkuk/thip/attendanceCheck/adapter/in/web/request/UserSignupRequest.java
around lines 5 to 7, the UserSignupRequest class is empty and cannot bind any
request data. Add necessary fields like email, password, and nickname to
represent the signup data, and include a protected no-args constructor annotated
with @NoArgsConstructor(access = AccessLevel.PROTECTED) to support
deserialization. If this DTO is not intended for use, remove the class entirely
to avoid unnecessary code.

Comment on lines +1 to +5
package konkuk.thip.recentSearch.application.port.out;

public interface RecentSearcQueryPort {

}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

클래스명 오탈자: SearcSearch
패키지·전역 네이밍 오탈자는 치명적입니다. 모든 참조 지점에서 컴파일 에러를 유발하므로 즉시 수정이 필요합니다.

-package konkuk.thip.recentSearch.application.port.out;
-
-public interface RecentSearcQueryPort {
+package konkuk.thip.recentSearch.application.port.out;
+
+public interface RecentSearchQueryPort {
 }
📝 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.

Suggested change
package konkuk.thip.recentSearch.application.port.out;
public interface RecentSearcQueryPort {
}
package konkuk.thip.recentSearch.application.port.out;
public interface RecentSearchQueryPort {
}
🤖 Prompt for AI Agents
In
src/main/java/konkuk/thip/recentSearch/application/port/out/RecentSearcQueryPort.java
at lines 1 to 5, the interface name has a typo: "RecentSearcQueryPort" should be
corrected to "RecentSearchQueryPort". Rename the interface and update all
references to this interface throughout the codebase to prevent compilation
errors caused by the naming mismatch.

Comment on lines +3 to +6

public interface RecentSearcCommandPort {

}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

클래스명 동일 오탈자 및 빈 포트
RecentSearcCommandPort 역시 Search 오탈자가 있으며, 추후 구현체가 생길 때까지 커맨드 메서드 시그니처를 미리 정의하면 API 설계가 명확해집니다.

-public interface RecentSearcCommandPort {
+public interface RecentSearchCommandPort {
 }
📝 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.

Suggested change
public interface RecentSearcCommandPort {
}
public interface RecentSearchCommandPort {
}
🤖 Prompt for AI Agents
In
src/main/java/konkuk/thip/recentSearch/application/port/out/RecentSearcCommandPort.java
lines 3 to 6, the interface name has a typo: "RecentSearcCommandPort" should be
corrected to "RecentSearchCommandPort". Additionally, define placeholder command
method signatures relevant to recent search operations to clarify the API design
before implementation.

Comment on lines +7 to +11
@Service
@RequiredArgsConstructor
public class RecentSearchService implements DummyUseCase {

}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

빈 서비스 클래스의 필요성을 신중히 검토하세요.

DummyUseCase를 구현하는 빈 서비스가 Spring 컨텍스트에 등록되어 불필요한 빈을 생성합니다. 서비스는 비즈니스 로직의 핵심 구성요소이므로, 실제 요구사항과 유스케이스가 명확해진 후에 생성하는 것이 더 적절합니다.

🤖 Prompt for AI Agents
In
src/main/java/konkuk/thip/recentSearch/application/service/RecentSearchService.java
around lines 7 to 11, the RecentSearchService class is an empty Spring service
implementing DummyUseCase, which leads to unnecessary bean creation. Remove this
empty service class or postpone its creation until there is a clear business
requirement and use case to implement, avoiding unused beans in the Spring
context.

Comment on lines +7 to +11
@Service
@RequiredArgsConstructor
public class RecordService implements DummyUseCase {

}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

DummyUseCase를 구현하는 빈 서비스 클래스입니다.

RecordServiceDummyUseCase 인터페이스를 구현하고 있는데, 인터페이스 이름 자체가 임시적인 성격을 나타냅니다. 도메인 재구성의 일환으로 생성된 스켈레톤 클래스로 보이며, 실제 비즈니스 로직 구현이 필요합니다.

실제 use case 인터페이스로 교체하는 것을 권장합니다:

-import konkuk.thip.record.application.port.in.DummyUseCase;
+import konkuk.thip.record.application.port.in.RecordUseCase;

-public class RecordService implements DummyUseCase {
+public class RecordService implements RecordUseCase {
+    // TODO: Implement record business logic
 
 }
📝 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.

Suggested change
@Service
@RequiredArgsConstructor
public class RecordService implements DummyUseCase {
}
-import konkuk.thip.record.application.port.in.DummyUseCase;
+import konkuk.thip.record.application.port.in.RecordUseCase;
@Service
@RequiredArgsConstructor
-public class RecordService implements DummyUseCase {
+public class RecordService implements RecordUseCase {
+ // TODO: Implement record business logic
}
🤖 Prompt for AI Agents
In src/main/java/konkuk/thip/record/application/service/RecordService.java
around lines 7 to 11, the RecordService class implements a placeholder interface
DummyUseCase, which is temporary and lacks real business logic. Replace
DummyUseCase with the actual use case interface relevant to the domain, and
implement the necessary business logic methods accordingly to complete the
service functionality.

Comment on lines +7 to +11
@Service
@RequiredArgsConstructor
public class SavedBookService implements DummyUseCase {

}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

DummyUseCase를 구현하는 빈 서비스 클래스입니다.

SavedBookServiceDummyUseCase 인터페이스를 구현하고 있어 RecordService와 동일한 이슈가 있습니다. 실제 책 저장 기능에 대한 비즈니스 로직과 적절한 use case 인터페이스가 필요합니다.

도메인에 특화된 use case 인터페이스로 교체하는 것을 권장합니다:

-import konkuk.thip.saved.application.port.in.DummyUseCase;
+import konkuk.thip.saved.application.port.in.SavedBookUseCase;

-public class SavedBookService implements DummyUseCase {
+public class SavedBookService implements SavedBookUseCase {
+    // TODO: Implement saved book business logic
+    // - Save book
+    // - Remove saved book
+    // - Get saved books list
 
 }
📝 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.

Suggested change
@Service
@RequiredArgsConstructor
public class SavedBookService implements DummyUseCase {
}
import konkuk.thip.saved.application.port.in.SavedBookUseCase;
@Service
@RequiredArgsConstructor
public class SavedBookService implements SavedBookUseCase {
// TODO: Implement saved book business logic
// - Save book
// - Remove saved book
// - Get saved books list
}
🤖 Prompt for AI Agents
In src/main/java/konkuk/thip/saved/application/service/SavedBookService.java
around lines 7 to 11, the SavedBookService class currently implements the
generic DummyUseCase interface, which is inappropriate. Replace DummyUseCase
with a domain-specific use case interface that reflects the actual business
logic for saving books. Define or use an existing interface that clearly
represents the saved book functionality and implement that instead to ensure
proper separation of concerns and clearer code semantics.

@RequiredArgsConstructor
public class RecordQueryPersistenceAdapter implements RecordQueryPort {

private final RecordJpaRepository recordJpaRepository;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

RecordJpaRepository 임포트 누락으로 컴파일 오류 발생

RecordJpaRepository에 대한 임포트 구문이 누락되어 컴파일이 실패합니다.

다음 diff를 적용하여 누락된 임포트를 추가하세요:

+import konkuk.thip.record.adapter.out.persistence.RecordJpaRepository;
📝 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.

Suggested change
private final RecordJpaRepository recordJpaRepository;
import konkuk.thip.record.adapter.out.persistence.RecordJpaRepository;
private final RecordJpaRepository recordJpaRepository;
🤖 Prompt for AI Agents
In
src/main/java/konkuk/thip/record/adapter/out/persistence/RecordQueryPersistenceAdapter.java
at line 12, the RecordJpaRepository class is used but not imported, causing a
compilation error. Add the appropriate import statement for RecordJpaRepository
at the top of the file to resolve the missing import issue.

@RequiredArgsConstructor
public class RecordCommandPersistenceAdapter implements RecordCommandPort {

private final RecordJpaRepository recordJpaRepository;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

RecordJpaRepository 임포트 누락으로 컴파일 오류 발생

RecordJpaRepository에 대한 임포트 구문이 누락되어 컴파일이 실패합니다.

다음 diff를 적용하여 누락된 임포트를 추가하세요:

+import konkuk.thip.record.adapter.out.persistence.RecordJpaRepository;
🤖 Prompt for AI Agents
In
src/main/java/konkuk/thip/record/adapter/out/persistence/RecordCommandPersistenceAdapter.java
at line 12, the RecordJpaRepository is used but not imported, causing a
compilation error. Add the appropriate import statement for RecordJpaRepository
at the top of the file to resolve the missing import issue.

Comment on lines +11 to +18
public class SavedQueryPersistenceAdapter implements SavedQueryPort {

private final SavedBookRepository savedBookRepository;
private final SavedFeedRepository savedFeedRepository;
private final SavedBookMapper savedBookMapper;
private final SavedFeedMapper savedFeedMapper;

} No newline at end of file
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

구현이 누락된 어댑터 클래스입니다.

SavedQueryPort 인터페이스를 구현하고 있지만 실제 메서드 구현이 없습니다. 의존성은 올바르게 주입되어 있으나 비어있는 클래스는 컴파일 오류를 유발할 수 있습니다.

인터페이스의 추상 메서드들을 구현하거나, 향후 구현 예정이라면 TODO 주석을 추가하는 것을 권장합니다. 필요시 구현 스켈레톤 코드 생성을 도와드릴 수 있습니다.

🤖 Prompt for AI Agents
In
src/main/java/konkuk/thip/saved/adapter/out/persistence/SavedQueryPersistenceAdapter.java
around lines 11 to 18, the class implements the SavedQueryPort interface but
does not provide implementations for its abstract methods, causing compilation
errors. To fix this, implement all abstract methods declared in SavedQueryPort
within this class. If the implementation is pending, add TODO comments in each
method stub to indicate future work and prevent compilation issues.

⚠️ Potential issue

SavedQueryPort 인터페이스의 메서드 구현이 누락되었습니다.

SavedQueryPort 인터페이스를 구현하고 있지만 실제 메서드 구현이 없습니다. 의존성 주입된 Repository와 Mapper들이 사용되지 않고 있어 불완전한 상태입니다.

SavedQueryPort 인터페이스의 메서드들을 구현하거나 TODO 주석을 추가하여 개발 진행 상황을 명확히 해주세요.

🤖 Prompt for AI Agents
In
src/main/java/konkuk/thip/saved/adapter/out/persistence/SavedQueryPersistenceAdapter.java
around lines 11 to 18, the class implements the SavedQueryPort interface but
does not provide implementations for its methods, leaving injected repositories
and mappers unused. To fix this, implement all required methods from the
SavedQueryPort interface using the injected dependencies, or if implementation
is pending, add TODO comments in the class to clearly indicate the development
status.

@buzz0331 buzz0331 merged commit 935e2d6 into develop Jun 24, 2025
3 checks passed
@buzz0331 buzz0331 deleted the chore/#25-package-modify branch June 26, 2025 11:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[THIP2025-54] [chore] 패키지 구조 정리

3 participants