Skip to content

[REFACTOR] 타임박스 도메인, 엔티티 분리 - 파일 네이밍 수정 외 3개#200

Merged
leegwichan merged 7 commits intodevelopfrom
refactor/#191
Jul 17, 2025
Merged

[REFACTOR] 타임박스 도메인, 엔티티 분리 - 파일 네이밍 수정 외 3개#200
leegwichan merged 7 commits intodevelopfrom
refactor/#191

Conversation

@leegwichan
Copy link
Member

@leegwichan leegwichan commented Jul 16, 2025

🚩 연관 이슈

#191

🗣️ 리뷰 요구사항 (선택)

  • 파일 이름이 많이 바뀌어서 또 다시 한 번 끊어 갑니다.
  • 파일 30개 바뀌었으니까, 커밋 단위로 리뷰하시는 것을 추천드립니다.

이번 PR 작업 내용

  • 파일 네이밍 변경 XXX -> XXXEntity, XXXDomain -> XXX
  • Bell 도메인 객체 생성 (적어도 Table 관련 객체는 도메인/엔티티를 분리하여 통일성을 주기 위해)
  • CustomTimeBoxNormalTimeBox에만 List<Bell> 추가
  • DTO <-> Domain 전환 로직 구현 (이후에 V1 지워지는 시점에 TODO 해결해주어야 함)

Summary by CodeRabbit

  • 신규 기능

    • 벨(Bell) 도메인 모델이 추가되어, 벨의 시간과 횟수에 대한 유효성 검증이 적용됩니다.
  • 리팩터링

    • 커스터마이즈 타임박스 및 벨 관련 도메인, 엔티티, DTO 클래스의 명칭과 구조가 일관성 있게 변경되었습니다.
    • 컬렉션 관리 클래스가 CustomizeTimeBoxes에서 CustomizeTimeBoxEntities로 통합 및 변경되었습니다.
    • 도메인과 엔티티 변환 로직이 명확히 분리되고, 벨 관련 DTO 변환 기능이 확장되었습니다.
    • 저장소 및 서비스 레이어에서 새로운 엔티티 명칭과 구조에 맞게 타입이 변경되었습니다.
  • 테스트

    • 벨 및 커스터마이즈 타임박스 관련 단위 테스트가 추가 및 리네이밍되었습니다.
    • 엔티티와 서비스 관련 테스트 코드가 새로운 클래스 명칭에 맞게 수정되었습니다.

@coderabbitai
Copy link

coderabbitai bot commented Jul 16, 2025

"""

Walkthrough

이 변경사항은 커스텀 타임박스 및 벨 도메인 구조를 전면적으로 리팩토링합니다. 엔티티와 도메인 객체의 명칭이 명확히 분리되고, 벨 관련 도메인 클래스와 DTO 변환 메서드가 추가되었습니다. 전체적으로 타입 일관성과 도메인-엔티티 구분을 강화하였습니다.

Changes

파일/그룹 변경 요약
src/main/java/com/debatetimer/domain/customize/Bell.java, src/test/java/com/debatetimer/domain/customize/BellTest.java 벨 도메인 클래스 및 유효성 테스트 추가
src/main/java/com/debatetimer/domain/customize/CustomizeTimeBox.java, NormalTimeBox.java, TimeBasedTimeBox.java, src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxTest.java, NormalTimeBoxTest.java, TimeBasedTimeBoxTest.java 도메인 클래스 및 테스트 클래스 이름 변경, 상속 구조 리팩토링, 벨 리스트 필드 및 getBells() 추상/구현 메서드 도입
src/main/java/com/debatetimer/domain/customize/CustomizeTimeBoxEntities.java, src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxEntitiesTest.java 엔티티 리스트 관리 클래스 및 테스트 추가, 기존 CustomizeTimeBoxes 대체
src/main/java/com/debatetimer/entity/customize/CustomizeTimeBoxEntity.java, src/test/java/com/debatetimer/entity/customize/CustomizeTimeBoxEntityTest.java 엔티티 클래스 및 테스트 이름 변경, JPA 테이블 어노테이션 추가
src/main/java/com/debatetimer/entity/customize/BellEntity.java, src/test/java/com/debatetimer/fixture/BellGenerator.java 벨 엔티티 생성자 및 생성기 파라미터 타입 CustomizeTimeBox → CustomizeTimeBoxEntity 변경
src/test/java/com/debatetimer/fixture/CustomizeTimeBoxGenerator.java 생성기 반환 타입 CustomizeTimeBox → CustomizeTimeBoxEntity 변경
src/main/java/com/debatetimer/repository/customize/BellRepository.java, CustomizeTimeBoxRepository.java 저장소 인터페이스에서 CustomizeTimeBox → CustomizeTimeBoxEntity 타입 전환 및 메서드 시그니처 변경, JPQL 쿼리 수정
src/main/java/com/debatetimer/service/customize/CustomizeService.java, CustomizeServiceV2.java 서비스 계층에서 엔티티/도메인 타입 일관성 있게 변경 (CustomizeTimeBoxes → CustomizeTimeBoxEntities 등)
src/main/java/com/debatetimer/dto/customize/request/BellRequest.java, CustomizeTimeBoxCreateRequest.java, CustomizeTableCreateRequest.java DTO에 도메인 변환 메서드 추가, 반환 타입 CustomizeTimeBoxes → CustomizeTimeBoxEntities 변경, 벨 도메인 변환 지원
src/main/java/com/debatetimer/dto/customize/response/BellResponse.java, CustomizeTimeBoxResponse.java, CustomizeTableResponse.java 도메인 객체 기반 생성자 및 변환 메서드 추가, 엔티티/도메인 구분 명확화
src/main/java/com/debatetimer/exception/errorcode/ClientErrorCode.java 상수 참조를 새로운 도메인/엔티티 클래스로 변경
src/test/java/com/debatetimer/repository/customize/CustomizeTimeBoxRepositoryTest.java, service/customize/CustomizeServiceTest.java, service/customize/CustomizeServiceV2Test.java 테스트 코드 내 엔티티 타입 일관성 있게 변경

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: 결과 반환
Loading

Possibly related PRs

  • #193: 벨 도메인, DTO, 엔티티, 에러 코드, API 문서 등 벨 관련 구조를 도입 및 확장한 PR로, 이번 PR과 직접적으로 벨 도메인 및 DTO 구조 변경에서 강한 코드 레벨 연관성이 있습니다.

Suggested labels

refactor

Suggested reviewers

  • coli-geonwoo
  • unifolio0
    """

📜 Recent review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2a9c992 and 7f890d3.

📒 Files selected for processing (1)
  • src/test/java/com/debatetimer/domain/customize/BellTest.java (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/test/java/com/debatetimer/domain/customize/BellTest.java
⏰ 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)
  • GitHub Check: build-and-push
✨ Finishing Touches
  • 📝 Generate Docstrings

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.

❤️ Share
🪧 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.

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.

@github-actions
Copy link

github-actions bot commented Jul 16, 2025

Test Results

 83 files   83 suites   12s ⏱️
226 tests 226 ✅ 0 💤 0 ❌
238 runs  238 ✅ 0 💤 0 ❌

Results for commit 7f890d3.

♻️ This comment has been updated with latest results.

@github-actions
Copy link

github-actions bot commented Jul 16, 2025

📝 Test Coverage Report

Overall Project 85.8% -0.16% 🍏
Files changed 96.64% 🍏

File Coverage
CustomizeTimeBoxRepository.java 100% 🍏
BellEntity.java 100% 🍏
CustomizeTimeBoxEntities.java 100% 🍏
Bell.java 100% 🍏
ClientErrorCode.java 100% 🍏
CustomizeService.java 100% 🍏
CustomizeServiceV2.java 95.29% 🍏
CustomizeTimeBoxEntity.java 95.07% 🍏
CustomizeTimeBox.java 86.96% 🍏
TimeBasedTimeBox.java 82.43% -2.7%
NormalTimeBox.java 69.05% -7.14%

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: 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

📥 Commits

Reviewing files that changed from the base of the PR and between b25a821 and da0f961.

📒 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_LENGTH
  • CustomizeTimeBoxEntity.SPEAKER_MAX_LENGTH
  • Bell.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: 서비스 클래스의 타입 참조가 새로운 엔티티 체계에 맞게 일관성 있게 업데이트되었습니다.

CustomizeTimeBoxesCustomizeTimeBoxEntities, CustomizeTimeBoxCustomizeTimeBoxEntity로의 변경이 모든 관련 위치에서 정확하게 적용되었습니다.

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: 엔티티 타입 임포트 변경이 적절합니다.

도메인-엔티티 분리 리팩토링에 맞춰 CustomizeTimeBoxEntitiesCustomizeTimeBoxEntity 임포트가 올바르게 변경되었습니다.

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 문 추가가 적절합니다.

CollectionsList import가 새로 추가된 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 쿼리에 반영되어 올바른 테이블 매핑을 보장합니다.

Copy link
Contributor

@unifolio0 unifolio0 left a comment

Choose a reason for hiding this comment

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

/noti
이번 pr에선 크게 리뷰할 내용이 많은 것 같진 않네요. 리뷰 조금 남겼으니 확인해주세요

Comment on lines +8 to +20
@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();
}
Copy link
Contributor

Choose a reason for hiding this comment

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

음... 이건 좀 궁금하네요. entity의 일급 컬렉션을 domain에 위치시킨 이유가 뭔가요?
이건 저도 확신이 안서서 적은 질문입니다

Copy link
Member Author

Choose a reason for hiding this comment

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

그게... 지금 해당 객체가 가지고 있는게 Entity 거덩요? 그런데 얘가 지금 ServiceV1에서는 도메인처럼 사용되고 있어요.
그래서 얘를 엔티티로 옮길까 하다가 (어짜피 곧 지워질 거기도 하고... 지금 ServiceV1에서는 도메인으로 쓰이기도 하고...) 일단 냅뒀습니다. 그래도 V2에서 사용하는 객체와 구분하기 위해서 이름은 바꿨습니다.
해당 부분은 V1까지 중복적으로 가지고 가다가, V2 적용 시점에 지울 것 같습니다. 구분을 위한 더 좋은 대안이 있다면 알려주세요!

package com.debatetimer.repository.customize;

import com.debatetimer.domain.customize.CustomizeTimeBoxes;
import com.debatetimer.domain.customize.CustomizeTimeBoxEntities;
Copy link
Contributor

Choose a reason for hiding this comment

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

domain을 반환하는 Repository? 콜리가 말한 Domain Repository인가요?

Copy link
Member Author

Choose a reason for hiding this comment

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

ㄴㄴ 이건 Entity를 반환하는 레포지토리. 일단 모든 레포지토리는 Entity를 반환하도록 하고, 레포지토리가 뭘 반환하게 할지는 다음 작업에서 생각하는 걸로
c.f. 콜리가 말하는 값 객체도 이번 작업에서 다루지 않을 예정

@leegwichan
Copy link
Member Author

/noti @unifolio0
코멘트에 답변했습니다~ 이번 PR은 비토 리뷰만 받고 넘어가겠습니다! (콜리 타 프로젝트 런칭 이슈)

Copy link
Contributor

@unifolio0 unifolio0 left a comment

Choose a reason for hiding this comment

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

/noti
approve했습니다

@leegwichan leegwichan merged commit 5268721 into develop Jul 17, 2025
8 checks passed
@leegwichan leegwichan deleted the refactor/#191 branch July 17, 2025 02:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

refactor 리팩토링

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants