Skip to content

Refactor/regacy challenge remove - #391

Merged
jihwankim128 merged 2 commits into
mainfrom
refactor/regacy-challenge-remove
Dec 1, 2025
Merged

Refactor/regacy challenge remove#391
jihwankim128 merged 2 commits into
mainfrom
refactor/regacy-challenge-remove

Conversation

@jihwankim128

@jihwankim128 jihwankim128 commented Dec 1, 2025

Copy link
Copy Markdown
Collaborator

#️⃣ 연관된 이슈

ex) close #Issue number

📝 작업 내용

이번 PR에서 작업한 내용을 간략히 설명해주세요(이미지 첨부 가능)

📷 스크린샷

이미지

💬 리뷰 요구사항(선택)

리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요

ex) 메서드 명칭

📌 PR 진행 시 참고사항

  • 리뷰어는 좋은 코드 방향을 제시하되, 수정을 강요하지 않습니다.
  • 좋은 코드를 발견하면 칭찬과 격려를 아끼지 않습니다.
  • 리뷰는 Reviewer로 지정된 시점 기준으로 3일 이내에 진행해 주세요.
  • Comment 작성 시 아래 Prefix를 사용해 주세요:
    • P1: 꼭 반영해 주세요 (Request Changes) – 이슈나 취약점 관련
    • P2: 반영을 고려해 주세요 (Comment) – 개선 의견
    • P3: 단순 제안 (Chore)

Summary by CodeRabbit

  • Refactor

    • Consolidated challenge entity architecture by consolidating specialized challenge types into a unified model.
    • Simplified challenge management infrastructure and data access layer.
  • Tests

    • Updated test implementations to align with refactored challenge system.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai

coderabbitai Bot commented Dec 1, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

This PR performs a major refactoring that removes the inheritance-based challenge hierarchy (BaseChallenge, PersonalChallenge, TeamChallenge, and their participation entities) along with their associated repositories, query implementations, services, and DTOs. Updates are made to remaining infrastructure layers to reference the new unified challenge model.

Changes

Cohort / File(s) Change Summary
Entity Removals (Core Challenge Hierarchy)
BaseChallenge.java, BaseChallengeParticipation.java, PersonalChallenge.java, PersonalChallengeParticipation.java, TeamChallenge.java, TeamChallengeParticipation.java, ChallengeStatus.java
Removed entire inheritance-based challenge hierarchy including base abstract classes, concrete subclasses, participation entities, JPA mappings, lifecycle methods, validation logic, and ChallengeStatus enum
Repository Removals
PersonalChallengeRepository.java, TeamChallengeRepository.java
Deleted JpaRepository interfaces and their custom JPQL query methods for challenge-specific data access
Query Layer Removals
PersonalChallengeQuery.java, TeamChallengeQuery.java, PersonalChallengeQueryImpl.java, TeamChallengeQueryImpl.java, PersonalChallengeQueryExecutor.java, PersonalChallengePredicates.java
Removed query interfaces, QueryDSL implementations, executors, and predicate builders for personal and team challenges
Projection Removals
PersonalChallengeProjections.java, TeamChallengeProjections.java
Deleted QueryDSL projection utility classes that constructed DTOs from entity mappings
Service Removals
PersonalChallengeService.java, TeamChallengeService.java
Removed service implementations handling challenge creation, participation, visibility, and updates with transactional and retry logic
DTO Factory Method Updates
AdminChallengeCreateDto.java, AdminChallengeDetailDto.java, ChallengeDto.java
Removed factory methods from(BaseChallenge) and conversion methods toTeamChallenge(), toPersonalChallenge()
Infrastructure Layer Updates
ChallengeGroupQueryExecutor.java, ChallengeGroupProjections.java, WeeklyRankingRepositoryImpl.java
Updated imports from QTeamChallengeParticipation to QParticipation and adjusted join predicates to use new participation entity references and createdDate field
Test Updates
ChallengeJoinConcurrencyTest.java, ChallengeTestDataSource.java, ChallengeAdminQueryTest.java, ChallengeQueryTest.java
Updated test domain models from TeamChallenge to Challenge, refactored challenge construction with new value objects (ChallengeInfo, ChallengeContent), added init() method for test data initialization, and updated repository method calls

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Areas requiring extra attention:

  • Verify complete migration: Confirm no lingering references to deleted BaseChallenge, PersonalChallenge, TeamChallenge, or related classes in the codebase
  • Join predicate correctness: Ensure the field mapping changes in ChallengeGroupQueryExecutor (join on participation.challenge.id and participation.memberId) correctly replace prior logic
  • Date filtering logic: Verify WeeklyRankingRepositoryImpl changes from participatedAt to createdDate maintain correct weekly ranking calculations
  • Participation relationship consistency: Confirm the QParticipation imports and join conditions across ChallengeGroupQueryExecutor, ChallengeGroupProjections, and WeeklyRankingRepositoryImpl align with the new entity structure
  • Test data initialization: Validate that the new init() method in ChallengeTestDataSource properly resets state and is correctly invoked in all test classes

Possibly related PRs

Suggested labels

dev:fix, refactoring

Poem

🐰 Hops through the codebase with glee,
Removing hierarchies wild and free,
PersonalChallenge, TeamChallenge too—
A unified model shines brand new!
Chaos to clarity, the refactor's done, 🌱

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch refactor/regacy-challenge-remove

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e727699 and 1393a78.

📒 Files selected for processing (29)
  • src/main/java/com/example/green/domain/challenge/controller/command/dto/AdminChallengeCreateDto.java (0 hunks)
  • src/main/java/com/example/green/domain/challenge/controller/query/dto/challenge/AdminChallengeDetailDto.java (0 hunks)
  • src/main/java/com/example/green/domain/challenge/entity/challenge/BaseChallenge.java (0 hunks)
  • src/main/java/com/example/green/domain/challenge/entity/challenge/BaseChallengeParticipation.java (0 hunks)
  • src/main/java/com/example/green/domain/challenge/entity/challenge/PersonalChallenge.java (0 hunks)
  • src/main/java/com/example/green/domain/challenge/entity/challenge/PersonalChallengeParticipation.java (0 hunks)
  • src/main/java/com/example/green/domain/challenge/entity/challenge/TeamChallenge.java (0 hunks)
  • src/main/java/com/example/green/domain/challenge/entity/challenge/TeamChallengeParticipation.java (0 hunks)
  • src/main/java/com/example/green/domain/challenge/entity/challenge/vo/ChallengeStatus.java (0 hunks)
  • src/main/java/com/example/green/domain/challenge/infra/querydsl/PersonalChallengeQueryImpl.java (0 hunks)
  • src/main/java/com/example/green/domain/challenge/infra/querydsl/TeamChallengeQueryImpl.java (0 hunks)
  • src/main/java/com/example/green/domain/challenge/infra/querydsl/executor/ChallengeGroupQueryExecutor.java (2 hunks)
  • src/main/java/com/example/green/domain/challenge/infra/querydsl/executor/PersonalChallengeQueryExecutor.java (0 hunks)
  • src/main/java/com/example/green/domain/challenge/infra/querydsl/predicates/PersonalChallengePredicates.java (0 hunks)
  • src/main/java/com/example/green/domain/challenge/infra/querydsl/projections/ChallengeGroupProjections.java (2 hunks)
  • src/main/java/com/example/green/domain/challenge/infra/querydsl/projections/PersonalChallengeProjections.java (0 hunks)
  • src/main/java/com/example/green/domain/challenge/infra/querydsl/projections/TeamChallengeProjections.java (0 hunks)
  • src/main/java/com/example/green/domain/challenge/repository/PersonalChallengeRepository.java (0 hunks)
  • src/main/java/com/example/green/domain/challenge/repository/TeamChallengeRepository.java (0 hunks)
  • src/main/java/com/example/green/domain/challenge/repository/query/PersonalChallengeQuery.java (0 hunks)
  • src/main/java/com/example/green/domain/challenge/repository/query/TeamChallengeQuery.java (0 hunks)
  • src/main/java/com/example/green/domain/challenge/service/PersonalChallengeService.java (0 hunks)
  • src/main/java/com/example/green/domain/challenge/service/TeamChallengeService.java (0 hunks)
  • src/main/java/com/example/green/domain/dashboard/rankingmodule/repository/WeeklyRankingRepositoryImpl.java (3 hunks)
  • src/main/java/com/example/green/infra/client/dto/ChallengeDto.java (0 hunks)
  • src/test/java/com/example/integration/challenge/ChallengeJoinConcurrencyTest.java (2 hunks)
  • src/test/java/com/example/integration/challenge/ChallengeTestDataSource.java (1 hunks)
  • src/test/java/com/example/integration/challenge/query/ChallengeAdminQueryTest.java (1 hunks)
  • src/test/java/com/example/integration/challenge/query/ChallengeQueryTest.java (1 hunks)

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

Comment @coderabbitai help to get the list of available commands and usage tips.

@jihwankim128
jihwankim128 force-pushed the refactor/regacy-challenge-remove branch from e61f682 to 1393a78 Compare December 1, 2025 08:32
@jihwankim128
jihwankim128 merged commit b245f6e into main Dec 1, 2025
1 check passed
@jihwankim128
jihwankim128 deleted the refactor/regacy-challenge-remove branch December 1, 2025 08:32
@github-actions

github-actions Bot commented Dec 1, 2025

Copy link
Copy Markdown

Unit Test Coverage Report

Total Project Coverage 37.82%
File Coverage [100%]
WeeklyRankingRepositoryImpl.java 0%

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant