[REFACTOR] 타임박스 도메인, 엔티티 분리 - 파일 네이밍 수정 외 3개#200
Conversation
|
""" Walkthrough이 변경사항은 커스텀 타임박스 및 벨 도메인 구조를 전면적으로 리팩토링합니다. 엔티티와 도메인 객체의 명칭이 명확히 분리되고, 벨 관련 도메인 클래스와 DTO 변환 메서드가 추가되었습니다. 전체적으로 타입 일관성과 도메인-엔티티 구분을 강화하였습니다. Changes
Sequence Diagram(s)sequenceDiagram
participant Controller
participant DTO_Request
participant Domain
participant Entity
participant Repository
participant DTO_Response
Controller->>DTO_Request: 요청 DTO 생성
DTO_Request->>Domain: toDomain() 호출 (벨 포함)
Domain->>Entity: 엔티티로 변환
Entity->>Repository: 저장/조회
Repository-->>Entity: 엔티티 반환
Entity->>DTO_Response: 응답 DTO로 변환 (ofDomain 등)
DTO_Response-->>Controller: 결과 반환
Possibly related PRs
Suggested labels
Suggested reviewers
📜 Recent review detailsConfiguration used: .coderabbit.yaml 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
✨ Finishing Touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 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
Documentation and Community
|
Test Results 83 files 83 suites 12s ⏱️ Results for commit 7f890d3. ♻️ This comment has been updated with latest results. |
📝 Test Coverage Report
|
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
src/main/java/com/debatetimer/dto/customize/request/CustomizeTableCreateRequest.java (1)
27-31: 도메인 객체 변환 메서드가 잘 구현되었습니다.TODO 주석에 따라 향후 메서드명 변경이 예정되어 있지만, 현재 구현은 올바릅니다.
V1 제거 시점에 메서드명을
toTimeBoxes()로 변경하는 리팩토링을 도와드릴 수 있습니다.src/main/java/com/debatetimer/dto/customize/response/CustomizeTimeBoxResponse.java (1)
68-75: Bell 변환 로직에서 null 반환 대신 빈 리스트 고려현재 빈 Bell 리스트에 대해 null을 반환하고 있는데, 일관성을 위해 빈 리스트 반환을 고려해보시기 바랍니다.
다음과 같이 변경하는 것을 고려해보세요:
private static List<BellResponse> toResponses(List<Bell> bells) { if (bells.isEmpty()) { return Collections.emptyList(); } return bells.stream() .map(BellResponse::new) .toList(); }이렇게 하면 클라이언트에서 null 체크 없이 일관되게 리스트를 처리할 수 있습니다.
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (30)
src/main/java/com/debatetimer/domain/customize/Bell.java(1 hunks)src/main/java/com/debatetimer/domain/customize/CustomizeTimeBox.java(3 hunks)src/main/java/com/debatetimer/domain/customize/CustomizeTimeBoxEntities.java(1 hunks)src/main/java/com/debatetimer/domain/customize/CustomizeTimeBoxes.java(0 hunks)src/main/java/com/debatetimer/domain/customize/NormalTimeBox.java(2 hunks)src/main/java/com/debatetimer/domain/customize/TimeBasedTimeBox.java(2 hunks)src/main/java/com/debatetimer/dto/customize/request/BellRequest.java(1 hunks)src/main/java/com/debatetimer/dto/customize/request/CustomizeTableCreateRequest.java(2 hunks)src/main/java/com/debatetimer/dto/customize/request/CustomizeTimeBoxCreateRequest.java(2 hunks)src/main/java/com/debatetimer/dto/customize/response/BellResponse.java(1 hunks)src/main/java/com/debatetimer/dto/customize/response/CustomizeTableResponse.java(2 hunks)src/main/java/com/debatetimer/dto/customize/response/CustomizeTimeBoxResponse.java(4 hunks)src/main/java/com/debatetimer/entity/customize/BellEntity.java(1 hunks)src/main/java/com/debatetimer/entity/customize/CustomizeTimeBoxEntity.java(3 hunks)src/main/java/com/debatetimer/exception/errorcode/ClientErrorCode.java(3 hunks)src/main/java/com/debatetimer/repository/customize/BellRepository.java(1 hunks)src/main/java/com/debatetimer/repository/customize/CustomizeTimeBoxRepository.java(1 hunks)src/main/java/com/debatetimer/service/customize/CustomizeService.java(4 hunks)src/main/java/com/debatetimer/service/customize/CustomizeServiceV2.java(7 hunks)src/test/java/com/debatetimer/domain/customize/BellTest.java(1 hunks)src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxEntitiesTest.java(2 hunks)src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxTest.java(5 hunks)src/test/java/com/debatetimer/domain/customize/NormalTimeBoxTest.java(4 hunks)src/test/java/com/debatetimer/domain/customize/TimeBasedTimeBoxTest.java(8 hunks)src/test/java/com/debatetimer/entity/customize/CustomizeTimeBoxEntityTest.java(13 hunks)src/test/java/com/debatetimer/fixture/BellGenerator.java(2 hunks)src/test/java/com/debatetimer/fixture/CustomizeTimeBoxGenerator.java(3 hunks)src/test/java/com/debatetimer/repository/customize/CustomizeTimeBoxRepositoryTest.java(4 hunks)src/test/java/com/debatetimer/service/customize/CustomizeServiceTest.java(4 hunks)src/test/java/com/debatetimer/service/customize/CustomizeServiceV2Test.java(5 hunks)
💤 Files with no reviewable changes (1)
- src/main/java/com/debatetimer/domain/customize/CustomizeTimeBoxes.java
🧰 Additional context used
🧠 Learnings (17)
📓 Common learnings
Learnt from: coli-geonwoo
PR: debate-timer/debate-timer-be#196
File: src/main/java/com/debatetimer/entity/poll/VoteEntity.java:19-0
Timestamp: 2025-07-10T01:01:08.967Z
Learning: VoteEntity와 같은 JPA 엔티티에서 getter/setter 메서드는 필요할 때 점진적으로 추가하는 방식을 선호함. 초기 엔티티 설정 단계에서는 최소한의 구조만 유지하고 기능을 점진적으로 확장하는 개발 방식을 사용함.
src/test/java/com/debatetimer/service/customize/CustomizeServiceTest.java (2)
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain 클래스에서는 생성자에서 stance null 검증을 먼저 수행한 후 isValidStance() 추상 메서드를 호출하는 구조로 되어 있어, 테스트용 구현체에서 isValidStance()는 단순히 true를 반환해도 된다.
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain에서 validateStance 메서드는 null 체크를 먼저 수행한 후에 isValidStance() 추상 메서드를 호출하는 구조로, 테스트용 구현체에서 isValidStance()가 단순히 true를 반환하는 것이 적절하다.
src/test/java/com/debatetimer/repository/customize/CustomizeTimeBoxRepositoryTest.java (2)
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain 클래스에서는 생성자에서 stance null 검증을 먼저 수행한 후 isValidStance() 추상 메서드를 호출하는 구조로 되어 있어, 테스트용 구현체에서 isValidStance()는 단순히 true를 반환해도 된다.
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain에서 validateStance 메서드는 null 체크를 먼저 수행한 후에 isValidStance() 추상 메서드를 호출하는 구조로, 테스트용 구현체에서 isValidStance()가 단순히 true를 반환하는 것이 적절하다.
src/test/java/com/debatetimer/domain/customize/TimeBasedTimeBoxTest.java (2)
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain 클래스에서는 생성자에서 stance null 검증을 먼저 수행한 후 isValidStance() 추상 메서드를 호출하는 구조로 되어 있어, 테스트용 구현체에서 isValidStance()는 단순히 true를 반환해도 된다.
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain에서 validateStance 메서드는 null 체크를 먼저 수행한 후에 isValidStance() 추상 메서드를 호출하는 구조로, 테스트용 구현체에서 isValidStance()가 단순히 true를 반환하는 것이 적절하다.
src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxEntitiesTest.java (2)
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain에서 validateStance 메서드는 null 체크를 먼저 수행한 후에 isValidStance() 추상 메서드를 호출하는 구조로, 테스트용 구현체에서 isValidStance()가 단순히 true를 반환하는 것이 적절하다.
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain 클래스에서는 생성자에서 stance null 검증을 먼저 수행한 후 isValidStance() 추상 메서드를 호출하는 구조로 되어 있어, 테스트용 구현체에서 isValidStance()는 단순히 true를 반환해도 된다.
src/test/java/com/debatetimer/domain/customize/NormalTimeBoxTest.java (2)
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain 클래스에서는 생성자에서 stance null 검증을 먼저 수행한 후 isValidStance() 추상 메서드를 호출하는 구조로 되어 있어, 테스트용 구현체에서 isValidStance()는 단순히 true를 반환해도 된다.
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain에서 validateStance 메서드는 null 체크를 먼저 수행한 후에 isValidStance() 추상 메서드를 호출하는 구조로, 테스트용 구현체에서 isValidStance()가 단순히 true를 반환하는 것이 적절하다.
src/main/java/com/debatetimer/entity/customize/CustomizeTimeBoxEntity.java (2)
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain 클래스에서는 생성자에서 stance null 검증을 먼저 수행한 후 isValidStance() 추상 메서드를 호출하는 구조로 되어 있어, 테스트용 구현체에서 isValidStance()는 단순히 true를 반환해도 된다.
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain에서 validateStance 메서드는 null 체크를 먼저 수행한 후에 isValidStance() 추상 메서드를 호출하는 구조로, 테스트용 구현체에서 isValidStance()가 단순히 true를 반환하는 것이 적절하다.
src/main/java/com/debatetimer/domain/customize/CustomizeTimeBox.java (2)
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain 클래스에서는 생성자에서 stance null 검증을 먼저 수행한 후 isValidStance() 추상 메서드를 호출하는 구조로 되어 있어, 테스트용 구현체에서 isValidStance()는 단순히 true를 반환해도 된다.
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain에서 validateStance 메서드는 null 체크를 먼저 수행한 후에 isValidStance() 추상 메서드를 호출하는 구조로, 테스트용 구현체에서 isValidStance()가 단순히 true를 반환하는 것이 적절하다.
src/test/java/com/debatetimer/entity/customize/CustomizeTimeBoxEntityTest.java (2)
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain에서 validateStance 메서드는 null 체크를 먼저 수행한 후에 isValidStance() 추상 메서드를 호출하는 구조로, 테스트용 구현체에서 isValidStance()가 단순히 true를 반환하는 것이 적절하다.
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain 클래스에서는 생성자에서 stance null 검증을 먼저 수행한 후 isValidStance() 추상 메서드를 호출하는 구조로 되어 있어, 테스트용 구현체에서 isValidStance()는 단순히 true를 반환해도 된다.
src/main/java/com/debatetimer/domain/customize/TimeBasedTimeBox.java (2)
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain 클래스에서는 생성자에서 stance null 검증을 먼저 수행한 후 isValidStance() 추상 메서드를 호출하는 구조로 되어 있어, 테스트용 구현체에서 isValidStance()는 단순히 true를 반환해도 된다.
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain에서 validateStance 메서드는 null 체크를 먼저 수행한 후에 isValidStance() 추상 메서드를 호출하는 구조로, 테스트용 구현체에서 isValidStance()가 단순히 true를 반환하는 것이 적절하다.
src/main/java/com/debatetimer/domain/customize/NormalTimeBox.java (2)
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain 클래스에서는 생성자에서 stance null 검증을 먼저 수행한 후 isValidStance() 추상 메서드를 호출하는 구조로 되어 있어, 테스트용 구현체에서 isValidStance()는 단순히 true를 반환해도 된다.
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain에서 validateStance 메서드는 null 체크를 먼저 수행한 후에 isValidStance() 추상 메서드를 호출하는 구조로, 테스트용 구현체에서 isValidStance()가 단순히 true를 반환하는 것이 적절하다.
src/main/java/com/debatetimer/dto/customize/response/CustomizeTimeBoxResponse.java (1)
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain 클래스에서는 생성자에서 stance null 검증을 먼저 수행한 후 isValidStance() 추상 메서드를 호출하는 구조로 되어 있어, 테스트용 구현체에서 isValidStance()는 단순히 true를 반환해도 된다.
src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxTest.java (2)
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain 클래스에서는 생성자에서 stance null 검증을 먼저 수행한 후 isValidStance() 추상 메서드를 호출하는 구조로 되어 있어, 테스트용 구현체에서 isValidStance()는 단순히 true를 반환해도 된다.
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain에서 validateStance 메서드는 null 체크를 먼저 수행한 후에 isValidStance() 추상 메서드를 호출하는 구조로, 테스트용 구현체에서 isValidStance()가 단순히 true를 반환하는 것이 적절하다.
src/main/java/com/debatetimer/dto/customize/request/CustomizeTableCreateRequest.java (2)
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain에서 validateStance 메서드는 null 체크를 먼저 수행한 후에 isValidStance() 추상 메서드를 호출하는 구조로, 테스트용 구현체에서 isValidStance()가 단순히 true를 반환하는 것이 적절하다.
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain 클래스에서는 생성자에서 stance null 검증을 먼저 수행한 후 isValidStance() 추상 메서드를 호출하는 구조로 되어 있어, 테스트용 구현체에서 isValidStance()는 단순히 true를 반환해도 된다.
src/main/java/com/debatetimer/dto/customize/request/CustomizeTimeBoxCreateRequest.java (2)
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain 클래스에서는 생성자에서 stance null 검증을 먼저 수행한 후 isValidStance() 추상 메서드를 호출하는 구조로 되어 있어, 테스트용 구현체에서 isValidStance()는 단순히 true를 반환해도 된다.
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain에서 validateStance 메서드는 null 체크를 먼저 수행한 후에 isValidStance() 추상 메서드를 호출하는 구조로, 테스트용 구현체에서 isValidStance()가 단순히 true를 반환하는 것이 적절하다.
src/test/java/com/debatetimer/fixture/CustomizeTimeBoxGenerator.java (2)
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain 클래스에서는 생성자에서 stance null 검증을 먼저 수행한 후 isValidStance() 추상 메서드를 호출하는 구조로 되어 있어, 테스트용 구현체에서 isValidStance()는 단순히 true를 반환해도 된다.
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain에서 validateStance 메서드는 null 체크를 먼저 수행한 후에 isValidStance() 추상 메서드를 호출하는 구조로, 테스트용 구현체에서 isValidStance()가 단순히 true를 반환하는 것이 적절하다.
src/test/java/com/debatetimer/domain/customize/BellTest.java (1)
Learnt from: leegwichan
PR: debate-timer/debate-timer-be#198
File: src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxDomainTest.java:82-112
Timestamp: 2025-07-15T01:28:24.847Z
Learning: CustomizeTimeBoxDomain에서 validateStance 메서드는 null 체크를 먼저 수행한 후에 isValidStance() 추상 메서드를 호출하는 구조로, 테스트용 구현체에서 isValidStance()가 단순히 true를 반환하는 것이 적절하다.
🧬 Code Graph Analysis (5)
src/main/java/com/debatetimer/dto/customize/response/CustomizeTableResponse.java (1)
src/main/java/com/debatetimer/domain/customize/CustomizeTimeBox.java (1)
CustomizeTimeBox(8-75)
src/main/java/com/debatetimer/dto/customize/request/CustomizeTableCreateRequest.java (1)
src/main/java/com/debatetimer/domain/customize/CustomizeTimeBox.java (1)
CustomizeTimeBox(8-75)
src/main/java/com/debatetimer/dto/customize/request/CustomizeTimeBoxCreateRequest.java (3)
src/main/java/com/debatetimer/domain/customize/CustomizeTimeBox.java (1)
CustomizeTimeBox(8-75)src/main/java/com/debatetimer/domain/customize/NormalTimeBox.java (1)
NormalTimeBox(8-57)src/main/java/com/debatetimer/domain/customize/TimeBasedTimeBox.java (1)
TimeBasedTimeBox(9-79)
src/test/java/com/debatetimer/domain/customize/BellTest.java (1)
src/main/java/com/debatetimer/exception/custom/DTClientErrorException.java (1)
DTClientErrorException(5-10)
src/main/java/com/debatetimer/domain/customize/Bell.java (1)
src/main/java/com/debatetimer/exception/custom/DTClientErrorException.java (1)
DTClientErrorException(5-10)
🔇 Additional comments (70)
src/main/java/com/debatetimer/exception/errorcode/ClientErrorCode.java (2)
4-4: 임포트 문 변경이 올바르게 적용되었습니다.도메인과 엔티티 분리 리팩토링에 맞춰
Bell도메인 클래스와CustomizeTimeBoxEntity엔티티 클래스를 올바르게 임포트하고 있습니다.Also applies to: 7-7
32-32: 상수 참조 변경이 일관성 있게 적용되었습니다.리팩토링된 클래스들의 상수를 올바르게 참조하고 있습니다:
CustomizeTimeBoxEntity.SPEECH_TYPE_MAX_LENGTHCustomizeTimeBoxEntity.SPEAKER_MAX_LENGTHBell.MAX_BELL_COUNT도메인-엔티티 분리 패턴이 일관성 있게 적용되었습니다.
Also applies to: 36-36, 71-71
src/test/java/com/debatetimer/service/customize/CustomizeServiceTest.java (2)
16-16: 엔티티 클래스 임포트가 올바르게 변경되었습니다.리팩토링에 맞춰
CustomizeTimeBoxEntity엔티티 클래스를 올바르게 임포트하고 있습니다.
51-51: 변수 타입 변경이 일관성 있게 적용되었습니다.모든 변수 선언에서
CustomizeTimeBox에서CustomizeTimeBoxEntity로 일관성 있게 변경되었습니다. 테스트 로직은 그대로 유지되어 기능상 문제가 없습니다.Also applies to: 112-112, 208-209
src/test/java/com/debatetimer/domain/customize/TimeBasedTimeBoxTest.java (2)
11-11: 테스트 클래스 이름이 올바르게 변경되었습니다.도메인 클래스 리팩토링에 맞춰
TimeBasedTimeBoxTest로 명명이 일관성 있게 변경되었습니다.
21-21: 생성자 호출이 일관성 있게 변경되었습니다.모든 테스트 메서드에서
TimeBasedTimeBox생성자 호출로 일관성 있게 변경되었습니다. 테스트 로직과 검증 방식은 그대로 유지되어 기능상 문제가 없습니다.Also applies to: 31-31, 45-45, 56-56, 67-67, 78-78, 88-88
src/main/java/com/debatetimer/dto/customize/request/BellRequest.java (2)
3-3: 도메인 클래스 임포트가 올바르게 추가되었습니다.새로 도입된
Bell도메인 클래스를 올바르게 임포트하고 있습니다.
10-12: DTO-Domain 변환 메서드가 올바르게 구현되었습니다.
toDomain()메서드가 깔끔하게 구현되어 DTO에서 도메인 객체로의 변환을 제공합니다. 도메인 객체의 생성자에서 검증 로직을 처리하므로 별도의 검증 없이 단순히 값을 전달하는 것이 적절합니다.src/test/java/com/debatetimer/repository/customize/CustomizeTimeBoxRepositoryTest.java (2)
9-9: 엔티티 클래스 임포트가 올바르게 변경되었습니다.리팩토링에 맞춰
CustomizeTimeBoxEntity엔티티 클래스를 올바르게 임포트하고 있습니다.
30-31: 변수 타입 변경이 일관성 있게 적용되었습니다.모든 변수 선언에서
CustomizeTimeBox에서CustomizeTimeBoxEntity로 일관성 있게 변경되었습니다. 레포지토리 테스트의 로직과 검증 방식은 그대로 유지되어 기능상 문제가 없습니다.Also applies to: 35-35, 53-53, 68-68
src/main/java/com/debatetimer/dto/customize/response/BellResponse.java (2)
3-3: 적절한 import 추가도메인 객체와의 연결을 위해 필요한 import가 추가되었습니다.
10-12: 도메인-DTO 변환 생성자 잘 구현됨Bell 도메인 객체에서 BellResponse DTO로의 변환을 위한 생성자가 깔끔하게 구현되었습니다. 기존 레코드 생성자를 재사용하는
this()패턴이 적절하게 사용되었습니다.src/main/java/com/debatetimer/entity/customize/BellEntity.java (2)
34-34: 엔티티 타입 참조 업데이트CustomizeTimeBox에서 CustomizeTimeBoxEntity로 타입 참조가 올바르게 업데이트되었습니다. 리팩토링의 일관성을 유지하는 적절한 변경사항입니다.
40-40: 생성자 파라미터 타입 업데이트생성자 파라미터 타입이 새로운 엔티티 클래스명과 일치하도록 올바르게 업데이트되었습니다.
src/main/java/com/debatetimer/domain/customize/CustomizeTimeBox.java (4)
5-5: Bell 도메인 지원을 위한 import 추가Bell 도메인 객체 지원을 위해 필요한 import가 추가되었습니다.
8-8: 클래스명 리팩토링CustomizeTimeBoxDomain에서 CustomizeTimeBox로 클래스명이 변경되어 명명 규칙의 일관성이 향상되었습니다.
20-20: 생성자명 업데이트클래스명 변경에 따라 생성자명이 올바르게 업데이트되었습니다.
74-74: Bell 지원을 위한 추상 메서드 추가서브클래스에서 벨 정보를 제공하도록 하는
getBells()추상 메서드가 추가되었습니다. 이는 도메인 모델에서 Bell 객체 통합을 위한 적절한 설계입니다.src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxEntitiesTest.java (3)
7-7: 엔티티 클래스 import 업데이트리팩토링에 따라 CustomizeTimeBoxEntity import가 올바르게 추가되었습니다.
15-15: 테스트 클래스명 업데이트엔티티 클래스명 변경에 따라 테스트 클래스명이 CustomizeTimeBoxEntitiesTest로 적절하게 변경되었습니다.
26-32: 테스트 변수 타입 업데이트모든 테스트 변수 타입들이 새로운 엔티티 클래스명과 일치하도록 일관성 있게 업데이트되었습니다. 테스트 로직은 그대로 유지되어 기능적 변경 없이 리팩토링이 적용되었습니다.
src/test/java/com/debatetimer/domain/customize/NormalTimeBoxTest.java (5)
8-8: 필요한 import 추가빈 리스트 생성을 위한 Collections import가 추가되었습니다.
12-12: 테스트 클래스명 업데이트도메인 클래스명 변경에 따라 테스트 클래스명이 NormalTimeBoxTest로 적절하게 업데이트되었습니다.
21-21: 생성자 호출 업데이트 - bells 파라미터 추가NormalTimeBox 생성자에 bells 파라미터가 추가된 것에 대응하여
Collections.emptyList()가 올바르게 추가되었습니다. 테스트의 초점이 시간 검증에 있으므로 빈 리스트 사용이 적절합니다.
30-30: 생성자 호출 업데이트 - bells 파라미터 추가null 시간 검증 테스트에서도 bells 파라미터가 올바르게 추가되었습니다.
39-39: 생성자 호출 업데이트 - bells 파라미터 추가양수 시간 검증 테스트에서도 bells 파라미터가 올바르게 추가되었습니다.
src/main/java/com/debatetimer/entity/customize/CustomizeTimeBoxEntity.java (1)
25-25: 엔티티 클래스 리네이밍이 정확하게 수행되었습니다.클래스명과 생성자명이
CustomizeTimeBox에서CustomizeTimeBoxEntity로 일관성 있게 변경되어 도메인과 엔티티 분리 목표에 부합합니다.Also applies to: 59-59, 83-83
src/test/java/com/debatetimer/fixture/BellGenerator.java (1)
4-4: 테스트 픽스처가 새로운 엔티티 타입에 맞게 정확하게 업데이트되었습니다.import 문과 메서드 파라미터가
CustomizeTimeBoxEntity로 일관성 있게 변경되었습니다.Also applies to: 17-17
src/main/java/com/debatetimer/service/customize/CustomizeServiceV2.java (1)
4-4: 서비스 클래스의 타입 참조가 새로운 엔티티 체계에 맞게 일관성 있게 업데이트되었습니다.
CustomizeTimeBoxes→CustomizeTimeBoxEntities,CustomizeTimeBox→CustomizeTimeBoxEntity로의 변경이 모든 관련 위치에서 정확하게 적용되었습니다.Also applies to: 14-14, 43-43, 69-69, 103-103, 107-107, 121-121, 133-133
src/test/java/com/debatetimer/service/customize/CustomizeServiceV2Test.java (1)
17-17: 테스트 클래스가 새로운 엔티티 타입에 맞게 정확하게 업데이트되었습니다.모든
CustomizeTimeBox타입 참조가CustomizeTimeBoxEntity로 일관성 있게 변경되어 리팩토링된 코드와 호환됩니다.Also applies to: 52-54, 71-72, 121-122, 220-220
src/main/java/com/debatetimer/domain/customize/CustomizeTimeBoxEntities.java (1)
1-21: 엔티티 컬렉션을 관리하는 잘 설계된 컨테이너 클래스입니다.이 클래스는 다음과 같은 좋은 설계 원칙을 따릅니다:
- 생성자에서 자동으로 시퀀스 기반 정렬 수행
- 불변성 보장 (
toList()사용)- 단일 책임 원칙 준수 (엔티티 컬렉션 관리에만 집중)
- 명확한 네이밍 규칙 적용
도메인과 엔티티 분리 목표에 부합하는 좋은 리팩토링입니다.
src/test/java/com/debatetimer/entity/customize/CustomizeTimeBoxEntityTest.java (2)
17-17: 엔티티 클래스명 변경에 따른 테스트 클래스 이름 업데이트가 적절합니다.도메인-엔티티 분리 리팩토링에 맞춰 테스트 클래스명이 올바르게 변경되었습니다.
28-32: 엔티티 클래스 참조 변경이 일관되게 적용되었습니다.모든 테스트 메서드에서
CustomizeTimeBox에서CustomizeTimeBoxEntity로의 참조 변경이 올바르게 수행되었으며, 테스트 로직은 그대로 유지되어 기존 검증 기능을 보장합니다.Also applies to: 45-49, 59-65, 73-76, 84-88, 99-102, 109-112, 120-123, 131-133, 141-143, 151-154, 162-165, 176-180
src/main/java/com/debatetimer/domain/customize/NormalTimeBox.java (4)
5-5: Bell 도메인 지원을 위한 List 임포트 추가가 적절합니다.새로운 Bell 기능을 지원하기 위해 필요한 임포트가 올바르게 추가되었습니다.
8-8: 도메인 클래스명 변경 및 상속 관계 정리가 적절합니다.
NormalTimeBoxDomain에서NormalTimeBox로의 클래스명 변경과CustomizeTimeBox상속이 도메인-엔티티 분리 리팩토링 목적에 부합합니다.
11-11: Bell 기능 추가가 올바르게 구현되었습니다.
List<Bell> bells필드 추가, 생성자 파라미터 확장, 그리고 필드 할당이 일관되게 수행되었습니다.Also applies to: 13-13, 17-17
53-56: 추상 메서드 구현이 올바릅니다.부모 클래스의 추상 메서드
getBells()를 적절히 구현하여 bells 리스트를 반환하고 있습니다.src/main/java/com/debatetimer/domain/customize/Bell.java (4)
7-10: 도메인 클래스 구조가 잘 설계되었습니다.불변 객체로 설계되었고, 벨 개수 제한을 상수로 명확히 정의한 것이 좋습니다.
12-20: 생성자 검증 로직이 적절합니다.생성자에서 시간과 개수에 대한 검증을 수행하고 불변 필드에 값을 할당하는 구조가 올바릅니다.
22-26: 시간 검증 로직이 올바릅니다.시간은 0 이상이어야 한다는 비즈니스 규칙이 적절히 구현되었습니다.
28-32: 개수 검증 로직이 올바릅니다.벨 개수는 양수이며 최대 3개까지 허용한다는 비즈니스 규칙이 적절히 구현되었습니다.
src/main/java/com/debatetimer/service/customize/CustomizeService.java (3)
4-4: 엔티티 타입 임포트 변경이 적절합니다.도메인-엔티티 분리 리팩토링에 맞춰
CustomizeTimeBoxEntities와CustomizeTimeBoxEntity임포트가 올바르게 변경되었습니다.Also applies to: 9-9
29-29: 변수 타입 변경이 일관되게 적용되었습니다.모든 메서드에서
CustomizeTimeBoxes에서CustomizeTimeBoxEntities로의 타입 변경이 일관되게 수행되었습니다.Also applies to: 36-36, 51-51, 58-58
71-78: private 메서드 시그니처 변경이 적절합니다.
saveTimeBoxes메서드의 반환 타입과 내부 로직이 새로운 엔티티 타입에 맞게 올바르게 변경되었습니다.src/main/java/com/debatetimer/dto/customize/request/CustomizeTableCreateRequest.java (2)
4-5: 도메인과 엔티티 지원을 위한 임포트 변경이 적절합니다.
CustomizeTimeBox도메인 클래스와CustomizeTimeBoxEntities엔티티 컬렉션 임포트가 올바르게 추가되었습니다.
17-21: 엔티티 변환 메서드가 올바르게 구현되었습니다.인덱스를 이용한 시퀀스 번호 할당과
CustomizeTimeBoxEntities생성이 적절히 수행되었습니다.src/test/java/com/debatetimer/domain/customize/BellTest.java (1)
24-24: 상수 사용을 통한 테스트 안정성 확보
Bell.MAX_BELL_COUNT상수를 사용하여 테스트가 도메인 로직 변경에 대해 안정적으로 작동하도록 구현한 것이 좋습니다.src/test/java/com/debatetimer/fixture/CustomizeTimeBoxGenerator.java (2)
6-6: 도메인/엔티티 분리 리팩토링에 맞는 일관된 네이밍 적용
CustomizeTimeBox에서CustomizeTimeBoxEntity로의 변경이 이번 리팩토링의 목표에 부합합니다.
19-29: 테스트 픽스처 로직 유지 및 타입 일관성 확보메서드 반환 타입과 생성자 호출이 새로운 엔티티 클래스명에 맞게 올바르게 업데이트되었습니다. 기존 로직은 그대로 유지되어 테스트 안정성이 보장됩니다.
src/main/java/com/debatetimer/domain/customize/TimeBasedTimeBox.java (2)
9-9: 도메인 클래스 네이밍 일관성 확보
TimeBasedTimeBoxDomain에서TimeBasedTimeBox로의 변경이 이번 리팩토링의 도메인/엔티티 분리 목표에 부합합니다.
75-78: TimeBasedTimeBox에 적절한 getBells() 구현시간 기반 타임박스의 경우 벨이 없는 것이 논리적으로 맞으므로, 빈 리스트를 반환하는 구현이 적절합니다.
src/main/java/com/debatetimer/dto/customize/response/CustomizeTableResponse.java (3)
13-13: 엔티티 컬렉션 타입 변경에 대한 일관성 확보
CustomizeTimeBoxes에서CustomizeTimeBoxEntities로의 변경이 리팩토링 목표에 부합합니다.
34-41: 도메인 객체 지원을 위한 정적 팩토리 메서드 추가도메인 객체를 직접 지원하는
ofDomain메서드가 추가되어 도메인/엔티티 분리 패턴을 잘 지원합니다.TODO 코멘트에 따르면 향후 정적 팩토리 메서드를 생성자로 전환할 예정인 것 같습니다. 현재 구현에서 이런 방향성이 적절한지 검토해보시기 바랍니다.
43-48: 도메인 객체 변환을 위한 메서드 오버로딩도메인 객체 리스트를 응답 DTO로 변환하는 오버로딩된 메서드가 깔끔하게 구현되었습니다.
src/main/java/com/debatetimer/dto/customize/response/CustomizeTimeBoxResponse.java (2)
55-66: 도메인 객체 지원 생성자 추가
CustomizeTimeBox도메인 객체를 직접 지원하는 생성자가 추가되어 도메인/엔티티 분리 패턴을 잘 지원합니다.
22-22: 엔티티 타입 업데이트 확인
CustomizeTimeBox에서CustomizeTimeBoxEntity로 파라미터 타입이 올바르게 업데이트되었습니다.src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxTest.java (4)
8-9: 새로운 import 문 추가가 적절합니다.
Collections와Listimport가 새로 추가된getBells()메서드에서 사용되어 필요한 변경사항입니다.
16-16: 클래스명 변경이 리팩토링 목적에 부합합니다.
CustomizeTimeBoxDomainTest에서CustomizeTimeBoxTest로 변경되어 도메인과 엔티티 분리 작업의 네이밍 규칙을 따르고 있습니다.
84-88: 내부 테스트 클래스의 이름 변경이 일관성 있게 적용되었습니다.
InheritedCustomizeTimeBoxDomain에서InheritedCustomizeTimeBox로 변경되고 생성자명도 함께 업데이트되어 일관성을 유지하고 있습니다.
115-118: 새로운 추상 메서드 구현이 테스트 목적에 적합합니다.
getBells()메서드가 빈 리스트를 반환하도록 구현되어 있습니다. 이는 테스트용 구현체에서 최소한의 기능만 제공하는 것으로 적절합니다.src/main/java/com/debatetimer/dto/customize/request/CustomizeTimeBoxCreateRequest.java (4)
3-11: 도메인/엔티티 분리에 맞는 import 구조로 개선되었습니다.새로운 도메인 클래스들(
Bell,NormalTimeBox,TimeBasedTimeBox)과 엔티티 클래스(CustomizeTimeBoxEntity)가 명확히 구분되어 import되었습니다.
44-51: 엔티티 생성 메서드의 반환 타입이 명확해졌습니다.
toTimeBox메서드가CustomizeTimeBoxEntity를 반환하도록 수정되어 엔티티 레이어의 책임이 명확해졌습니다. 시간 기반 여부에 따른 분기 처리도 적절합니다.
53-58: 도메인 객체 변환 로직이 잘 구현되었습니다.새로운
toDomain()메서드가 적절한 도메인 객체(TimeBasedTimeBox또는NormalTimeBox)를 생성하고 있습니다. 벨 변환 로직도 포함되어 있어 완전한 도메인 객체 변환을 지원합니다.
60-67: 벨 변환 헬퍼 메서드가 안전하게 구현되었습니다.
toBells메서드가 null 체크를 포함하여 안전하게 구현되었고, 스트림을 사용한 변환 로직도 깔끔합니다.src/main/java/com/debatetimer/repository/customize/BellRepository.java (2)
4-4: 엔티티 클래스로의 import 변경이 적절합니다.
CustomizeTimeBox에서CustomizeTimeBoxEntity로 변경되어 엔티티 레이어와의 일관성을 유지하고 있습니다.
12-16: 모든 메서드 시그니처가 일관되게 업데이트되었습니다.
findByCustomizeTimeBox,deleteAllByCustomizeTimeBoxIn,findAllByCustomizeTimeBoxIn메서드들이 모두CustomizeTimeBoxEntity타입을 사용하도록 일관되게 변경되었습니다.src/main/java/com/debatetimer/repository/customize/CustomizeTimeBoxRepository.java (4)
3-5: Import 구조가 엔티티/도메인 분리에 맞게 업데이트되었습니다.
CustomizeTimeBoxEntities도메인 컬렉션 클래스와CustomizeTimeBoxEntity엔티티 클래스가 명확히 구분되어 import되었습니다.
12-23: Repository 인터페이스의 타입 매개변수와 메서드 시그니처가 일관되게 변경되었습니다.제네릭 타입과 모든 메서드 시그니처가
CustomizeTimeBoxEntity를 사용하도록 업데이트되어 엔티티 레이어의 일관성을 유지하고 있습니다.
25-28: 도메인 컬렉션 래퍼 클래스 사용이 적절합니다.
findTableTimeBoxes메서드가CustomizeTimeBoxEntities래퍼 클래스를 반환하도록 변경되어 도메인 레이어에서 엔티티 컬렉션을 캡슐화하는 구조로 개선되었습니다.
30-30: JPQL 쿼리의 엔티티 클래스명이 정확히 업데이트되었습니다.
CustomizeTimeBoxEntity로 변경된 엔티티 클래스명이 JPQL 쿼리에 반영되어 올바른 테이블 매핑을 보장합니다.
unifolio0
left a comment
There was a problem hiding this comment.
/noti
이번 pr에선 크게 리뷰할 내용이 많은 것 같진 않네요. 리뷰 조금 남겼으니 확인해주세요
| @Getter | ||
| public class CustomizeTimeBoxEntities { | ||
|
|
||
| private static final Comparator<CustomizeTimeBoxEntity> TIME_BOX_COMPARATOR = Comparator | ||
| .comparing(CustomizeTimeBoxEntity::getSequence); | ||
|
|
||
| private final List<CustomizeTimeBoxEntity> timeBoxes; | ||
|
|
||
| public CustomizeTimeBoxEntities(List<CustomizeTimeBoxEntity> timeBoxes) { | ||
| this.timeBoxes = timeBoxes.stream() | ||
| .sorted(TIME_BOX_COMPARATOR) | ||
| .toList(); | ||
| } |
There was a problem hiding this comment.
음... 이건 좀 궁금하네요. entity의 일급 컬렉션을 domain에 위치시킨 이유가 뭔가요?
이건 저도 확신이 안서서 적은 질문입니다
There was a problem hiding this comment.
그게... 지금 해당 객체가 가지고 있는게 Entity 거덩요? 그런데 얘가 지금 ServiceV1에서는 도메인처럼 사용되고 있어요.
그래서 얘를 엔티티로 옮길까 하다가 (어짜피 곧 지워질 거기도 하고... 지금 ServiceV1에서는 도메인으로 쓰이기도 하고...) 일단 냅뒀습니다. 그래도 V2에서 사용하는 객체와 구분하기 위해서 이름은 바꿨습니다.
해당 부분은 V1까지 중복적으로 가지고 가다가, V2 적용 시점에 지울 것 같습니다. 구분을 위한 더 좋은 대안이 있다면 알려주세요!
| package com.debatetimer.repository.customize; | ||
|
|
||
| import com.debatetimer.domain.customize.CustomizeTimeBoxes; | ||
| import com.debatetimer.domain.customize.CustomizeTimeBoxEntities; |
There was a problem hiding this comment.
domain을 반환하는 Repository? 콜리가 말한 Domain Repository인가요?
There was a problem hiding this comment.
ㄴㄴ 이건 Entity를 반환하는 레포지토리. 일단 모든 레포지토리는 Entity를 반환하도록 하고, 레포지토리가 뭘 반환하게 할지는 다음 작업에서 생각하는 걸로
c.f. 콜리가 말하는 값 객체도 이번 작업에서 다루지 않을 예정
|
/noti @unifolio0 |
🚩 연관 이슈
#191
🗣️ 리뷰 요구사항 (선택)
이번 PR 작업 내용
XXX->XXXEntity,XXXDomain->XXXCustomTimeBox중NormalTimeBox에만List<Bell>추가Summary by CodeRabbit
신규 기능
리팩터링
CustomizeTimeBoxes에서CustomizeTimeBoxEntities로 통합 및 변경되었습니다.테스트