-
Notifications
You must be signed in to change notification settings - Fork 1
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
feat: 과제 히스토리 도메인 로직 및 깃허브 클라이언트 로직 변경 #639
Conversation
Walkthrough이번 변경사항은 Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant AssignmentHistory
participant GithubClient
User->>AssignmentHistory: createAssignment(StudyDetail, Member)
AssignmentHistory->>AssignmentHistory: Initialize to FAILURE, NOT_SUBMITTED
User->>AssignmentHistory: submitAssignment(submissionDetails)
AssignmentHistory->>AssignmentHistory: success(submissionLink, commitHash, contentLength, committedAt)
AssignmentHistory->>GithubClient: getLatestAssignmentSubmission(repo, week)
GithubClient->>GithubClient: getFileContent(repo, path)
GithubClient->>User: return submission details
Assessment against linked issues
Poem
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? TipsChatThere are 3 ways to chat with CodeRabbit:
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 as PR comments)
Additionally, you can add CodeRabbit Configuration File (
|
Job Summary for GradleCheck Style and Test to Develop :: build-test
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Outside diff range, codebase verification and nitpick comments (1)
src/main/java/com/gdschongik/gdsc/domain/study/domain/AssignmentSubmissionStatus.java (1)
9-11
:CANCELLED
상태의 제거에 대한 영향
CANCELLED
상태는 여러 곳에서 사용되고 있으며, 특히Assignment
클래스와 관련된 로직에서 중요한 역할을 하고 있습니다. 따라서,AssignmentSubmissionStatus
에서 이 상태를 제거하는 것은 기능에 영향을 미칠 수 있습니다.PENDING
상태는 다른 도메인(OrderStatus
)에서 사용되고 있어 직접적인 영향은 없을 수 있지만, 관련된 모든 사용 사례를 검토하는 것이 좋습니다.
CANCELLED
상태는Assignment
클래스에서 여전히 사용 중입니다.PENDING
상태는OrderStatus
와 관련되어 있으며,AssignmentSubmissionStatus
와는 별개의 맥락입니다.이 변경 사항이 다른 코드에 미치는 영향을 확인하고, 필요한 경우 관련 로직을 업데이트하는 것이 좋습니다.
Analysis chain
PENDING
및CANCELLED
상태 제거에 대한 고려
PENDING
및CANCELLED
상태가 제거되어FAILURE
와SUCCESS
만 남았습니다. 이는 제출 상태 관리의 단순화를 의미합니다.PENDING
상태에 대한 별도의 enum 클래스 생성 계획이 주석으로 남아 있습니다. 이 변경이 다른 코드에 미치는 영향을 확인하고, 필요한 경우 관련 로직을 업데이트하는 것이 좋습니다.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify the impact of removing `PENDING` and `CANCELLED` states. # Test: Search for `PENDING` and `CANCELLED` usage. Expect: No occurrences. rg --type java 'PENDING|CANCELLED'Length of output: 1861
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (7)
- src/main/java/com/gdschongik/gdsc/domain/study/domain/AssignmentHistory.java (4 hunks)
- src/main/java/com/gdschongik/gdsc/domain/study/domain/AssignmentSubmissionStatus.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/domain/study/domain/SubmissionFailureType.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java (2 hunks)
- src/main/java/com/gdschongik/gdsc/infra/github/client/GithubClient.java (2 hunks)
- src/test/java/com/gdschongik/gdsc/domain/study/domain/AssignmentHistoryTest.java (1 hunks)
- src/test/java/com/gdschongik/gdsc/global/common/constant/StudyConstant.java (1 hunks)
Additional comments not posted (21)
src/main/java/com/gdschongik/gdsc/domain/study/domain/SubmissionFailureType.java (1)
9-9
:NONE
상태 추가
NONE
상태가 추가되어 제출이 성공적일 때를 명확히 나타냅니다. 이는 제출 결과 관리의 명확성을 높이는 긍정적인 변화입니다.src/test/java/com/gdschongik/gdsc/global/common/constant/StudyConstant.java (1)
36-39
: 새로운 상수 추가
SUBMISSION_LINK
,COMMIT_HASH
,CONTENT_LENGTH
,COMMITTED_AT
와 같은 새로운 상수가 추가되었습니다. 이 상수들은 과제 제출과 관련된 메타데이터를 제공하여, 테스트 및 과제 세부 정보 참조에 유용할 수 있습니다. 이러한 상수들이 프로젝트 내에서 어떻게 사용되는지 확인하여, 필요 시 추가적인 문서화를 고려하세요.src/main/java/com/gdschongik/gdsc/infra/github/client/GithubClient.java (5)
27-30
: 좋습니다!
getRepository
메서드는 적절한 예외 처리를 통해 깔끔하게 작성되었습니다.
58-64
: 좋습니다!
getFileContent
메서드는 적절한 예외 처리를 통해 깔끔하게 작성되었습니다.
66-72
: 좋습니다!
readFileContent
메서드는 파일 내용을 읽고 적절한 예외 처리를 제공합니다.
74-78
: 좋습니다!
getCommitDate
메서드는 커밋 날짜를 가져오고 적절한 예외 처리를 제공합니다.
35-55
: 리팩토링이 잘 되었습니다!
getLatestAssignmentSubmission
메서드는 모듈화를 통해 가독성과 유지보수성을 높였습니다. 다른 코드와의 통합을 확인하세요.src/main/java/com/gdschongik/gdsc/domain/study/domain/AssignmentHistory.java (7)
51-51
: 필드 추가가 적절합니다.
committedAt
필드는 제출 타임스탬프를 추적하는 데 적합합니다.
52-52
: 필드 추가가 적절합니다.
submissionFailureType
필드는 제출 실패 유형을 관리하는 데 적합합니다.
62-68
: 생성자 변경이 적절합니다.생성자가 단순화되어 명확성이 향상되었습니다.
73-76
: 메서드 구현이 적절합니다.
create
메서드는 제출 상태와 실패 유형을 명확하게 초기화합니다.
81-84
: 메서드 구현이 적절합니다.
isSubmitted
메서드는 제출 상태를 효과적으로 확인합니다.
88-95
: 메서드 구현이 적절합니다.
success
메서드는 제출 세부 사항과 상태를 성공으로 업데이트합니다.
97-107
: 메서드 구현이 적절합니다.
fail
메서드는 제출 실패 시나리오를 처리하며, 실패 유형의 유효성을 검증합니다.src/test/java/com/gdschongik/gdsc/domain/study/domain/AssignmentHistoryTest.java (3)
34-64
: 테스트 클래스가 적절합니다.
빈_과제이력_생성할때
클래스는 초기 상태를 명확하게 테스트합니다.
66-95
: 테스트 클래스가 적절합니다.
과제이력_제출_성공할때
클래스는 성공적인 제출 후 상태 변화를 적절히 검증합니다.
97-164
: 테스트 클래스가 적절합니다.
과제이력_제출_실패할때
클래스는 실패 시나리오와 실패 유형 제약을 철저히 검증합니다.src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java (4)
151-151
: 변경된 에러 코드 확인:ASSIGNMENT_INVALID_FAILURE_TYPE
.이 에러 코드는 과제 업데이트에서 제출 실패 유형으로 초점을 변경한 것입니다. 비즈니스 로직과 문서화가 이 변경 사항과 일치하는지 확인하세요.
161-161
: 새로운 에러 코드 추가:GITHUB_CONTENT_NOT_FOUND
.이 에러 코드는 GitHub 파일이 존재하지 않을 때의 구체적인 피드백을 제공합니다. 에러 처리의 세분화를 향상시킵니다.
162-162
: 새로운 에러 코드 추가:GITHUB_FILE_READ_FAILED
.이 에러 코드는 GitHub에서 파일 읽기에 실패할 경우를 처리하며, 강력한 에러 관리를 위한 중요한 요소입니다.
163-163
: 새로운 에러 코드 추가:GITHUB_COMMIT_DATE_FETCH_FAILED
.이 에러 코드는 GitHub에서 커밋 날짜 조회 실패를 처리하며, 진단 능력을 향상시킵니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm
pr도 다 읽어봤습니당
🌱 관련 이슈
📌 작업 내용 및 특이사항
로직 변경사항
PENDING
상태가 제거되며 제출상태의 경우실패
및성공
상태만 존재합니다.실패
입니다.NONE
이 추가되었습니다. 제출상태가성공
인 경우 이 상태를 사용합니다.NOT_SUBMITTED
가 됩니다. (기존에는 null)PENDING
제거 및 분리PENDING
의 경우 DB 상에서만 제거되며, 클라이언트 응답을 내려줄 때 별도의SubmissionDisplayStatus
와 같은 enum 클래스를 통해 변환되는 과정을 거치게 됩니다.PENDING
을 사용하는 경우, 마감기한 이후에는FAIL
로 설정해줘야 합니다.PENDING
->FAIL
배치가 필요하지 않도록 초기에FAIL
로 시작하도록 하고, 대신 제출기한 도중에는PENDING
으로 조회되어야 하므로, DB에서 사용되는 enum과 클라이언트 응답에 사용되는 enum을 분리하기로 했습니다 (✨ 클라이언트 응답용 과제 제출상태 및 변환 로직 구현 #638 에서 처리 예정)깃허브 클라이언트 로직 관련
IOException
케이스를 잡아서 각기 다른 에러코드로 변환합니다.그 외 자세한 내용은 테스트로 확인 부탁드립니다
📝 참고사항
📚 기타
Summary by CodeRabbit
새로운 기능
success
및fail
메서드 추가.committedAt
필드를 통해 제출 타임스탬프 저장.AssignmentSubmissionStatus
에서PENDING
및CANCELLED
상태 제거,NONE
상태 추가.버그 수정
테스트
AssignmentHistory
클래스에 대한 유닛 테스트 추가로 커버리지 향상.문서화
StudyConstant
클래스에 새로운 상수 추가로 과제 제출 관련 메타데이터 제공.