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

feat: 스터디 과제 레포지터리를 수정할 수 있도록 개선 #822

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

Conversation

kckc0608
Copy link
Member

@kckc0608 kckc0608 commented Nov 27, 2024

🌱 관련 이슈

📌 작업 내용 및 특이사항

  • StudyHistoryValidator 내 레포지토리 업데이트 검증 로직에서 이미 제출한 과제 여부 체크 로직 삭제
  • 삭제 과정에서 isAnyAssignmentSubmitted 변수 제거 및 관련 레포지토리 코드 삭제
  • StudyHistoryValidator 이미 제출한 과제 여부 체크 테스트 제거

📝 참고사항

📚 기타

Summary by CodeRabbit

  • 버그 수정

    • updateRepository 메서드의 설명이 명확하게 수정되었습니다.
    • StudyHistoryValidatorvalidateUpdateRepository 메서드에서 불필요한 매개변수가 제거되었습니다.
  • 기능 변경

    • AssignmentHistoryCustomRepository에서 제출된 과제가 있는지 확인하는 메서드가 제거되었습니다.
    • StudyHistoryValidatorTest에서 관련 테스트 케이스가 삭제되었습니다.

@kckc0608 kckc0608 added the ✨ feature 새로운 기능 추가 및 수정 label Nov 27, 2024
@kckc0608 kckc0608 self-assigned this Nov 27, 2024
@kckc0608 kckc0608 requested a review from a team as a code owner November 27, 2024 12:23
Copy link

coderabbitai bot commented Nov 27, 2024

Walkthrough

이 변경 사항은 StudentStudyHistoryController, StudentStudyHistoryService, AssignmentHistoryCustomRepository, AssignmentHistoryCustomRepositoryImpl, StudyHistoryValidator, 및 StudyHistoryValidatorTest 클래스의 메서드 설명 및 시그니처를 수정하는 내용을 포함합니다. updateRepository 메서드는 이제 제출된 과제의 존재 여부를 확인하는 불리언 변수를 사용하지 않으며, 관련된 메서드와 테스트에서도 이러한 변경이 반영되었습니다. 전반적으로, 코드의 간결성을 높이고, 과제 제출 레포지토리에 대한 명확성을 개선합니다.

Changes

파일 경로 변경 요약
src/main/java/com/gdschongik/gdsc/domain/study/api/StudentStudyHistoryController.java updateRepository 메서드의 설명이 "레포지토리를 입력합니다. 이미 제출한 과제가 있다면 수정할 수 없습니다."에서 "과제 제출 레포지토리를 입력합니다."로 변경됨.
src/main/java/com/gdschongik/gdsc/domain/study/application/StudentStudyHistoryService.java updateRepository 메서드에서 isAnyAssignmentSubmitted 불리언 변수가 제거됨.
src/main/java/com/gdschongik/gdsc/domain/study/dao/AssignmentHistoryCustomRepository.java existsSubmittedAssignmentByMemberAndStudy 메서드가 삭제됨.
src/main/java/com/gdschongik/gdsc/domain/study/dao/AssignmentHistoryCustomRepositoryImpl.java existsSubmittedAssignmentByMemberAndStudy 메서드가 삭제됨.
src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyHistoryValidator.java validateUpdateRepository 메서드의 시그니처에서 isAnyAssignmentSubmitted 매개변수가 제거됨.
src/test/java/com/gdschongik/gdsc/domain/study/domain/StudyHistoryValidatorTest.java validateUpdateRepository 메서드의 시그니처가 변경되고, 관련 테스트 메서드가 제거됨.

Assessment against linked issues

Objective Addressed Explanation
스터디 과제 레포지터리를 수정할 수 있도록 개선 (#811)

Possibly related PRs

Suggested reviewers

  • uwoobeat
  • Sangwook02
  • seulgi99

🐰 "변경된 코드, 더 명확한 길,
과제 제출, 이제는 쉬워질게,
레포지토리와 함께 뛰어놀고,
모두가 함께하는 즐거운 일!" 🐇


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

🧹 Outside diff range and nitpick comments (2)
src/main/java/com/gdschongik/gdsc/domain/study/application/StudentStudyHistoryService.java (2)

68-68: 테스트 용이성 개선이 필요합니다.

TODO 주석에서 언급된 대로 GHRepository를 래퍼 클래스로 감싸서 테스트 가능하도록 개선이 필요합니다. 이는 단위 테스트의 신뢰성과 유지보수성을 높이는 중요한 개선사항입니다.

다음과 같은 래퍼 인터페이스와 구현체를 제안드립니다. 작성을 도와드릴까요?

public interface RepositoryWrapper {
    String getOwnerOAuthId();
    String getRepositoryUrl();
}

public class GHRepositoryWrapper implements RepositoryWrapper {
    private final GHRepository repository;
    // implementation
}

Line range hint 71-75: 로깅 메시지 개선을 제안드립니다.

현재 로깅 메시지에 studyId를 포함하면 디버깅에 더 도움이 될 것 같습니다.

-        log.info(
-                "[StudyHistoryService] 레포지토리 입력: studyHistoryId={}, repositoryLink={}",
-                studyHistory.getId(),
-                request.repositoryLink());
+        log.info(
+                "[StudyHistoryService] 레포지토리 입력: studyId={}, studyHistoryId={}, repositoryLink={}",
+                studyId,
+                studyHistory.getId(),
+                request.repositoryLink());
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 5fc0d43 and eca45ba.

📒 Files selected for processing (6)
  • src/main/java/com/gdschongik/gdsc/domain/study/api/StudentStudyHistoryController.java (1 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/study/application/StudentStudyHistoryService.java (1 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/study/dao/AssignmentHistoryCustomRepository.java (0 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/study/dao/AssignmentHistoryCustomRepositoryImpl.java (0 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyHistoryValidator.java (1 hunks)
  • src/test/java/com/gdschongik/gdsc/domain/study/domain/StudyHistoryValidatorTest.java (1 hunks)
💤 Files with no reviewable changes (2)
  • src/main/java/com/gdschongik/gdsc/domain/study/dao/AssignmentHistoryCustomRepository.java
  • src/main/java/com/gdschongik/gdsc/domain/study/dao/AssignmentHistoryCustomRepositoryImpl.java
🔇 Additional comments (4)
src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyHistoryValidator.java (1)

Line range hint 42-47: 과제 제출 여부 검증 제거에 대한 검토가 필요합니다.

validateUpdateRepository 메서드에서 과제 제출 여부 검증이 제거되었습니다. 이는 PR의 목적에 부합하지만, 다음 사항들을 확인해 주시기 바랍니다:

  1. 과제가 제출된 후에도 레포지토리를 수정할 수 있도록 하는 것이 비즈니스 요구사항에 맞는지
  2. 과제 평가나 이력 관리에 영향이 없는지

현재 구현은 레포지토리 소유자 검증만을 수행하여 코드가 더 명확해졌습니다.

✅ Verification successful

과제 제출 여부와 관계없이 레포지토리 수정이 가능하도록 변경된 것이 확인되었습니다.

코드베이스 분석 결과, 다음과 같은 사항들이 확인되었습니다:

  1. StudentStudyDetailService에서 isAnySubmitted 상태는 단순히 대시보드 표시 용도로만 사용되고 있습니다.
  2. StudyHistoryValidatorvalidateUpdateRepository 메서드는 레포지토리 소유자 검증만을 수행하도록 의도적으로 변경되었습니다.
  3. 과제 제출 상태(AssignmentHistory.isSubmitted())는 레포지토리 수정과 독립적으로 관리됩니다.

이는 학생들이 과제 제출 후에도 레포지토리를 자유롭게 수정할 수 있도록 하는 의도적인 설계 변경으로 보입니다. 과제 평가는 AssignmentHistory를 통해 독립적으로 관리되므로, 이력 관리에도 영향이 없습니다.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: 과제 제출 후 레포지토리 수정과 관련된 비즈니스 로직 검증

# 관련된 서비스 레이어에서 과제 제출 관련 로직 확인
rg -A 5 "Assignment.*Submit"

# 테스트 코드에서 관련 시나리오 확인
rg -A 5 "validateUpdateRepository.*test"

Length of output: 13290


Script:

#!/bin/bash
# 과제 제출 관련 로직과 레포지토리 수정 관련 코드 검색

# StudyHistory 클래스에서 레포지토리 수정 관련 로직 확인
ast-grep --pattern 'class StudyHistory {
  $$$
  updateRepository($$$) {
    $$$
  }
  $$$
}'

# 과제 제출 상태와 레포지토리 수정 관련 테스트 코드 검색
rg -A 10 "class.*StudyHistoryTest|class.*StudyHistoryValidatorTest"

# AssignmentHistory 클래스에서 과제 제출 상태 관련 로직 확인
ast-grep --pattern 'class AssignmentHistory {
  $$$
  isSubmitted($$$) {
    $$$
  }
  $$$
}'

Length of output: 2581


Script:

#!/bin/bash
# 과제 제출과 레포지토리 수정 관련 코드 추가 검색

# StudyHistory 클래스의 전체 내용 확인
rg -A 20 "class StudyHistory"

# 과제 제출 상태 변경 관련 로직 검색
rg -A 10 "updateRepository|setSubmitted|isSubmitted"

# 과제 제출 후 레포지토리 수정 관련 테스트 케이스 검색
rg -A 10 "test.*Repository.*Update|test.*Assignment.*Submit"

Length of output: 24031

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

24-24: API 설명이 개선되었습니다만, 관련 검증 로직을 확인해주세요.

API 설명이 "과제 제출 레포지토리를 입력합니다"로 명확하게 변경된 것은 좋은 개선입니다. 하지만 기존의 제출된 과제 검증 로직이 제거된 것으로 보이는데, 이로 인해 발생할 수 있는 영향을 확인해주시기 바랍니다.

관련 검증 로직의 변경사항을 확인하기 위해 다음 스크립트를 실행합니다:

✅ Verification successful

검증 로직이 적절히 구현되어 있습니다.

레포지토리 업데이트 관련 검증 로직을 확인한 결과, 다음과 같은 중요한 검증이 유지되고 있습니다:

  • 레포지토리 소유자와 현재 사용자의 일치 여부 확인
  • GitHub 레포지토리 존재 여부 검증
  • 레포지토리 링크 업데이트 기능의 정상 동작

API 설명 변경은 현재 구현된 검증 로직과 일관성이 있으며, 안전하게 처리되고 있습니다.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: 관련된 검증 로직의 변경사항 확인

# StudyHistoryValidator 클래스에서 검증 로직 확인
ast-grep --pattern 'class StudyHistoryValidator {
  $$$
  validateUpdateRepository($$$) {
    $$$
  }
  $$$
}'

# StudentStudyHistoryService 클래스에서 updateRepository 메서드 확인
ast-grep --pattern 'class StudentStudyHistoryService {
  $$$
  updateRepository($$$) {
    $$$
  }
  $$$
}'

Length of output: 222


Script:

#!/bin/bash
# Let's try a different approach to find the relevant files and their content

# Find all Java files related to study history
fd -e java -x rg -l "StudyHistory" {}

# Search for repository update related code
rg -A 10 "updateRepository|validateRepository" --type java

Length of output: 10017


Script:

#!/bin/bash
# Let's check the StudyHistoryValidator implementation
rg -A 10 "class StudyHistoryValidator" --type java

# Also check for any validation-related error codes
rg "REPOSITORY|VALIDATION" ./src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java

Length of output: 2963


Script:

#!/bin/bash
# Let's check the implementation of validateUpdateRepository method
rg -A 10 "validateUpdateRepository" --type java

# And check for any recent changes to validation logic
git diff HEAD~1 -- src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyHistoryValidator.java

Length of output: 4369

src/test/java/com/gdschongik/gdsc/domain/study/domain/StudyHistoryValidatorTest.java (1)

110-110: 과제 제출 검증 로직 제거에 대한 검토 필요

레포지토리 소유권 검증을 단순화한 것은 좋은 변경이지만, 과제 제출 여부 확인 로직이 제거된 것이 안전한지 검토가 필요합니다. 이전 버전에서는 과제가 이미 제출된 경우를 체크했는데, 이 검증이 제거됨으로써 발생할 수 있는 부작용이 없는지 확인이 필요합니다.

다음 사항들을 고려해보시기 바랍니다:

  1. 과제 제출 검증이 다른 계층으로 이동되었는지
  2. 이 변경으로 인해 발생할 수 있는 비즈니스 로직상의 문제는 없는지
  3. 추가적인 테스트 케이스가 필요한지
src/main/java/com/gdschongik/gdsc/domain/study/application/StudentStudyHistoryService.java (1)

67-67: 검증 로직이 단순화되어 개선되었습니다.

레포지토리 소유권 검증이 더 명확하고 간단해졌습니다. 불필요한 과제 제출 여부 확인을 제거한 것이 좋은 변경사항입니다.

Copy link
Member

@uwoobeat uwoobeat left a comment

Choose a reason for hiding this comment

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

lgtm

Copy link
Member

@Sangwook02 Sangwook02 left a comment

Choose a reason for hiding this comment

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

lgtm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ feature 새로운 기능 추가 및 수정
Projects
None yet
Development

Successfully merging this pull request may close these issues.

✨ 스터디 과제 레포지터리를 수정할 수 있도록 개선
3 participants