Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: 엔티티 필드 및 생성자 메서드 시그니처 변경 #850

Open
wants to merge 7 commits into
base: develop
Choose a base branch
from

Conversation

kckc0608
Copy link
Member

@kckc0608 kckc0608 commented Jan 22, 2025

🌱 관련 이슈

📌 작업 내용 및 특이사항

  • 엔티티 필드 순서를 Id -> 일반 필드 -> enum -> vo -> 연관관계 순으로 정렬했습니다.

📝 참고사항

  • BaseSemesterEntity 관련 필드는 뒷쪽으로 옮겼습니다.

📚 기타

Summary by CodeRabbit

릴리즈 노트

  • 도메인 변경

    • 쿠폰, 회원, 멤버십, 주문, 모집, 스터디 관련 도메인 클래스의 필드 및 생성자 구조 재정비
    • 일부 클래스에 새로운 필드 추가 (예: 쿠폰의 사용 여부, 리포지토리 링크, 스터디 이력 상태 등)
    • 생성자 및 메서드 파라미터 순서 조정
  • 기능 변경

    • 도메인 클래스의 내부 로직 유지
    • 객체 생성 및 상태 관리 방식 개선

이번 업데이트는 시스템의 내부 구조를 최적화하고 코드의 일관성을 높이는 데 중점을 두었습니다.

@kckc0608 kckc0608 added the ♻️ refactor 기능 개선 label Jan 22, 2025
@kckc0608 kckc0608 self-assigned this Jan 22, 2025
@kckc0608 kckc0608 requested a review from a team as a code owner January 22, 2025 13:13
Copy link

coderabbitai bot commented Jan 22, 2025

워크스루

이 풀 리퀘스트는 여러 도메인 엔티티의 필드 순서와 메서드 시그니처를 재구성하는 리팩토링 작업입니다. 주요 변경 사항은 엔티티 클래스들의 필드 선언 순서, 생성자 파라미터 순서, 그리고 일부 필드 추가 및 제거를 포함합니다. 변경의 목적은 코드의 일관성을 높이고 엔티티 구조를 표준화하는 것입니다.

변경 사항

파일 변경 요약
IssuedCoupon.java hasRevoked, usedAt 필드 추가, 생성자 파라미터 순서 변경
Member.java 멤버 변수 재정렬, univEmail 추가
Membership.java regularRequirement 필드 추가 및 생성자 파라미터 순서 변경
Order.java status, moneyInfo 필드 재추가
Recruitment.java feeName 필드 추가, 생성자 파라미터 순서 변경
RecruitmentRound.java roundType 필드 추가 및 생성자 파라미터 순서 변경
StudyAchievement.java achievementType 필드 추가 및 생성자 파라미터 순서 변경
StudyAnnouncement.java 생성자 파라미터 순서 변경
StudyDetail.java study 필드 재추가 및 생성자 파라미터 순서 변경
StudyHistory.java repositoryLink, studyHistoryStatus 필드 추가

이슈 평가

목표 달성 여부 설명
엔티티 필드 순서 통일
필드 선언 순서 정규화
생성자 파라미터 순서 수정

관련 가능성 있는 PR

추천 리뷰어

  • Sangwook02
  • AlmondBreez3
  • seulgi99

🐰 코드의 숲을 거닐며
필드들은 춤을 추고
순서를 바꾸어 노래해
리팩토링의 멜로디로 🎵


📜 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 f3948c0 and d43ce5f.

📒 Files selected for processing (1)
  • src/main/java/com/gdschongik/gdsc/domain/recruitment/domain/RecruitmentRound.java (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/main/java/com/gdschongik/gdsc/domain/recruitment/domain/RecruitmentRound.java

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ 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.
    • Generate unit testing code for this file.
    • 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 generate unit testing code for this file.
    • @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 generate unit testing code.
    • @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.

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. (Beta)
  • @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

Job Summary for Gradle

Check Style and Test to Develop :: build-test
Gradle Root Project Requested Tasks Gradle Version Build Outcome Build Scan®
gdsc check 8.5 Build Scan published

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

🧹 Nitpick comments (7)
src/main/java/com/gdschongik/gdsc/domain/recruitment/domain/RecruitmentRound.java (1)

49-60: 생성자 매개변수 순서가 개선되었습니다.

필드 선언 순서와 동일하게 매개변수가 정렬되어 일관성이 향상되었습니다. 다만, 가독성을 위해 매개변수 그룹 사이에 빈 줄을 추가하는 것을 고려해보세요.

 private RecruitmentRound(
         String name,
         RoundType roundType,
         final Period period,
         Recruitment recruitment,
+
         Integer academicYear,
         SemesterType semesterType) {
src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyAchievement.java (1)

51-53: 팩토리 메서드가 적절히 수정되었습니다!

생성자와 동일한 순서로 파라미터가 변경되어 일관성이 유지되었습니다.

메서드의 의도를 더 명확히 하기 위해 다음과 같이 JavaDoc을 추가하는 것을 고려해보세요:

+    /**
+     * StudyAchievement 엔티티를 생성합니다.
+     *
+     * @param achievementType 학습 성취 유형
+     * @param student 학생 멤버
+     * @param study 스터디
+     * @return 생성된 StudyAchievement 엔티티
+     */
     public static StudyAchievement create(AchievementType achievementType, Member student, Study study) {
src/main/java/com/gdschongik/gdsc/domain/recruitment/domain/Recruitment.java (2)

23-24: 필드 유효성 검사 추가 필요

feeName 필드에 JPA 유효성 검사를 추가하는 것이 좋겠습니다. 데이터 무결성을 보장하기 위해 다음과 같은 제약 조건을 고려해 보세요:

-    private String feeName;
+    @Column(name = "fee_name", length = 100, nullable = false)
+    private String feeName;

41-48: 팩토리 메서드가 잘 구현되었습니다.

매개변수 순서가 생성자와 일관성 있게 변경되었습니다. 다만, 메서드의 용도를 명확히 하기 위해 JavaDoc 추가를 제안드립니다.

+    /**
+     * Recruitment 엔티티를 생성합니다.
+     * @param feeName 납부금 이름
+     * @param fee 납부금액
+     * @param semesterPeriod 학기 기간
+     * @param academicYear 학년도
+     * @param semesterType 학기 구분
+     * @return 생성된 Recruitment 엔티티
+     */
     public static Recruitment create(
src/main/java/com/gdschongik/gdsc/domain/order/domain/Order.java (1)

67-83: 생성자 매개변수 순서도 필드 순서와 일치시켜야 합니다.

필드 순서를 재정렬할 때 생성자의 매개변수 순서도 동일하게 맞춰주시면 코드의 일관성이 향상될 것 같습니다.

    private Order(
            String nanoId,
+           String paymentKey,
+           ZonedDateTime approvedAt,
+           ZonedDateTime canceledAt,
+           OrderStatus status,
+           MoneyInfo moneyInfo,
            Long memberId,
            Long membershipId,
            Long recruitmentRoundId,
-           Long issuedCouponId,
-           OrderStatus status,
-           MoneyInfo moneyInfo) {
+           Long issuedCouponId) {
src/main/java/com/gdschongik/gdsc/domain/study/domain/AssignmentHistory.java (1)

64-71: 생성자 매개변수 순서를 필드 순서와 일치시키는 것이 좋겠습니다.

현재 필드는 다음 순서로 잘 정리되어 있습니다:

  1. ID
  2. 일반 필드 (submissionLink, commitHash, contentLength, committedAt)
  3. Enum 필드 (submissionStatus, submissionFailureType)
  4. 관계 필드 (studyDetail, member)

하지만 생성자의 매개변수 순서는 이와 다릅니다. 일관성을 위해 다음과 같이 변경하는 것을 제안합니다:

    private AssignmentHistory(
-           AssignmentSubmissionStatus submissionStatus,
-           SubmissionFailureType submissionFailureType,
-           StudyDetail studyDetail,
-           Member member) {
+           StudyDetail studyDetail,
+           Member member,
+           AssignmentSubmissionStatus submissionStatus,
+           SubmissionFailureType submissionFailureType) {
        this.submissionStatus = submissionStatus;
        this.submissionFailureType = submissionFailureType;
        this.studyDetail = studyDetail;
        this.member = member;
    }
src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyDetail.java (1)

54-56: 엔티티 필드 순서 개선 필요

PR 목적에 따라 관계 필드는 마지막에 위치해야 하지만, 현재는 다른 필드들 사이에 위치해 있습니다. 필드 순서를 다음과 같이 정리하는 것이 좋습니다:

  1. Id 필드
  2. 일반 필드
  3. enum 필드
  4. VO 필드
  5. 관계 필드
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 0160cd8 and f3948c0.

📒 Files selected for processing (12)
  • src/main/java/com/gdschongik/gdsc/domain/coupon/domain/IssuedCoupon.java (2 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/member/domain/Member.java (1 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/membership/domain/Membership.java (2 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/order/domain/Order.java (3 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/recruitment/domain/Recruitment.java (1 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/recruitment/domain/RecruitmentRound.java (1 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/study/domain/AssignmentHistory.java (1 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/study/domain/Study.java (1 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyAchievement.java (2 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyAnnouncement.java (1 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyDetail.java (1 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyHistory.java (2 hunks)
🔇 Additional comments (16)
src/main/java/com/gdschongik/gdsc/domain/recruitment/domain/RecruitmentRound.java (2)

37-39: 필드 선언이 잘 구성되어 있습니다!

엔티티 필드 순서 규칙에 맞게 enum 필드가 적절히 배치되었습니다.


62-70: 정적 팩토리 메서드가 적절히 수정되었습니다.

매개변수 순서가 생성자와 일치하도록 개선되었으며, recruitment에서 기본 엔티티 필드를 가져오는 방식이 명확합니다.

src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyAchievement.java (2)

33-34: 필드 선언이 적절히 개선되었습니다!

@Enumerated(EnumType.STRING) 어노테이션 추가와 필드 순서 변경이 잘 이루어졌습니다. 특히 EnumType을 STRING으로 지정한 것이 데이터 안정성 측면에서 좋은 선택입니다.


45-46: 생성자 시그니처가 일관성 있게 변경되었습니다!

필드 순서와 동일하게 파라미터 순서를 변경하여 코드의 일관성이 향상되었습니다.

src/main/java/com/gdschongik/gdsc/domain/recruitment/domain/Recruitment.java (1)

33-37: 생성자 매개변수 순서 변경이 적절합니다.

PR 목적에 맞게 필드 순서가 잘 정리되었으며, 부모 클래스 생성자 호출도 올바르게 구현되었습니다.

src/main/java/com/gdschongik/gdsc/domain/order/domain/Order.java (1)

Line range hint 91-114: 정적 팩토리 메서드 구현이 잘 되어있습니다.

createPendingcreateFree 메서드가 각각의 상태에 맞게 적절히 구현되어 있으며, 무료 주문에 대한 유효성 검사도 잘 구현되어 있습니다.

src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyAnnouncement.java (2)

32-34: 필드 순서 변경이 잘 되었습니다!

관계 필드(relationship field)를 엔티티 끝부분으로 이동한 것이 좋은 구조적 개선입니다. FetchType.LAZY를 사용한 것도 적절합니다.


37-40: 생성자 매개변수 순서 변경에 따른 영향도 확인이 필요합니다.

생성자의 매개변수 순서가 변경되었습니다. 이 변경이 다른 코드에 미치는 영향을 확인해야 합니다.

✅ Verification successful

생성자 매개변수 순서 변경은 안전합니다.

빌더 패턴을 통해서만 객체가 생성되고 있어, 생성자의 매개변수 순서 변경이 다른 코드에 영향을 주지 않습니다. 직접적인 생성자 호출이 발견되지 않았으며, 모든 객체 생성이 빌더를 통해 이루어지고 있습니다.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: 생성자 사용 패턴 검색

# StudyAnnouncement 생성자 호출 패턴 검색
rg "new StudyAnnouncement\(" --type java

Length of output: 42


Script:

#!/bin/bash
# Description: 다양한 패턴으로 StudyAnnouncement 사용 검색

# 클래스 이름으로 전체 검색
echo "=== StudyAnnouncement 관련 파일 검색 ==="
rg "StudyAnnouncement" --type java -l

# Builder 패턴 사용 검색
echo -e "\n=== Builder 패턴 사용 검색 ==="
rg "StudyAnnouncement\.builder\(\)" --type java -A 5

# 테스트 파일에서 사용 패턴 검색
echo -e "\n=== 테스트 파일에서 사용 검색 ==="
fd -e java -g "*Test.java" --exec rg "StudyAnnouncement" {}

Length of output: 1764

src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyHistory.java (1)

38-42: 필드 순서가 잘 정리되었습니다!

엔티티 필드가 다음과 같은 순서로 잘 정리되어 있습니다:

  1. ID 필드
  2. 일반 필드 (repositoryLink)
  3. Enum 필드 (studyHistoryStatus)
  4. 관계 필드 (student, study)
src/main/java/com/gdschongik/gdsc/domain/coupon/domain/IssuedCoupon.java (1)

35-39: 필드 순서와 생성자 시그니처가 일관성있게 변경되었습니다!

  1. 필드가 ID, 일반 필드(hasRevoked, usedAt), 관계 필드(coupon, member) 순으로 정리되었습니다.
  2. 생성자 매개변수 순서도 필드 순서와 일치하도록 변경되었습니다.

Also applies to: 49-50

src/main/java/com/gdschongik/gdsc/domain/membership/domain/Membership.java (1)

37-39: 필드 순서와 생성자 시그니처가 잘 정리되었습니다!

  1. 필드가 ID, 값 객체(regularRequirement), 관계 필드(member, recruitmentRound) 순으로 정리되었습니다.
  2. 생성자 매개변수도 필드 순서와 동일하게 변경되었습니다.

Also applies to: 49-50

src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyDetail.java (1)

64-65: 생성자 매개변수 순서가 적절합니다.

필드 순서와 일관성 있게 생성자 매개변수가 정리되었습니다.

src/main/java/com/gdschongik/gdsc/domain/study/domain/Study.java (2)

55-60: 시간 관련 필드가 적절하게 추가되었습니다.

시작 시간과 종료 시간 필드가 명확한 주석과 함께 추가되었습니다.


83-92: 생성자와 create 메서드의 매개변수 순서가 일관성 있게 변경되었습니다.

필드 순서와 동일한 패턴으로 매개변수가 정리되었으며, 모든 유효성 검사 로직이 잘 유지되고 있습니다.

Also applies to: 107-116

src/main/java/com/gdschongik/gdsc/domain/member/domain/Member.java (2)

42-43: 필드 순서가 체계적으로 정리되었습니다.

Id, 일반 필드, enum 필드 순으로 잘 정리되었습니다.

Also applies to: 46-47, 57-70


79-105: 생성자 매개변수 순서가 필드 순서와 일치하도록 잘 변경되었습니다.

필드 순서와 동일한 패턴으로 생성자 매개변수가 정리되었습니다.

Comment on lines +43 to +44
public static StudyAnnouncement create(String title, String link, Study study) {
return StudyAnnouncement.builder().title(title).link(link).study(study).build();
Copy link

Choose a reason for hiding this comment

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

💡 Codebase verification

팩토리 메서드 호출 순서가 잘못되었습니다.

StudyAnnouncement.create() 메서드는 (title, link, study) 순서로 매개변수를 기대하지만, 다음 위치에서 잘못된 순서로 호출되고 있습니다:

  • src/main/java/com/gdschongik/gdsc/domain/study/application/MentorStudyService.java에서 (study, title, link) 순서로 전달하고 있습니다.

매개변수 순서를 StudyAnnouncement.create(request.title(), request.link(), study)로 수정해야 합니다.

🔗 Analysis chain

팩토리 메서드 시그니처 변경에 따른 영향도 확인이 필요합니다.

create 메서드의 매개변수 순서가 변경되었습니다. 이 메서드를 사용하는 모든 곳에서 올바른 순서로 인자를 전달하는지 확인이 필요합니다.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: create 메서드 호출 패턴 검색

# StudyAnnouncement.create 메서드 호출 패턴 검색
rg "StudyAnnouncement\.create\(" --type java

Length of output: 241

Comment on lines +74 to +82
public static StudyDetail create(Long week, String attendanceNumber, Period period, Study study) {
return StudyDetail.builder()
.study(study)
.week(week)
.period(period)
.attendanceNumber(attendanceNumber)
.period(period)
.curriculum(Curriculum.empty())
.assignment(Assignment.empty())
.study(study)
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

중복된 period 설정 수정 필요

builder 호출에서 period가 두 번 설정되고 있습니다:

 return StudyDetail.builder()
         .week(week)
-        .period(period)
         .attendanceNumber(attendanceNumber)
         .period(period)
         .curriculum(Curriculum.empty())
         .assignment(Assignment.empty())
         .study(study)
         .build();
📝 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 static StudyDetail create(Long week, String attendanceNumber, Period period, Study study) {
return StudyDetail.builder()
.study(study)
.week(week)
.period(period)
.attendanceNumber(attendanceNumber)
.period(period)
.curriculum(Curriculum.empty())
.assignment(Assignment.empty())
.study(study)
public static StudyDetail create(Long week, String attendanceNumber, Period period, Study study) {
return StudyDetail.builder()
.week(week)
.attendanceNumber(attendanceNumber)
.period(period)
.curriculum(Curriculum.empty())
.assignment(Assignment.empty())
.study(study)

Copy link

Job Summary for Gradle

Check Style and Test to Develop :: build-test
Gradle Root Project Requested Tasks Gradle Version Build Outcome Build Scan®
gdsc check 8.5 Build Scan published

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.

♻️ 엔티티 필드 순서 및 메서드 시그니쳐 변경
1 participant