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: 인증시 학교 이메일 인증 메일 전송 여부 판단 로직 추가 #513

Merged
merged 11 commits into from
Jul 31, 2024

Conversation

seulgi99
Copy link
Contributor

@seulgi99 seulgi99 commented Jul 23, 2024

🌱 관련 이슈

📌 작업 내용 및 특이사항

  • 이메일 인증메일 보낼때 redis에 저장하도록 하고

  • 이메일 토큰을 검증할때 redis에 조회하여

  • 토큰이 존재하면 같은토큰인지 검증합니다.(여러번 인증메일보내면 가장 최근꺼만 인증가능하도록)

  • 존재하지 않으면 에러를 뱉습니다.

  • 대시보드의 이메일 인증 상태 조회에 이 토큰존재 여부로 IN_PROGRESS 상태를 결정합니다.

  • 추가로 application-secret.yml에 jwt값들 default 지정한 이유는 테스트에서 값을 가져와야하기 때문입니다.

📝 참고사항

📚 기타

Summary by CodeRabbit

  • New Features

    • 이메일 인증 프로세스를 개선하여, 대학 이메일 검증 상태를 대시보드에 포함시켰습니다.
    • 새로운 오류 코드 EMAIL_NOT_SENT를 추가하여 이메일 발송 실패를 구체적으로 처리합니다.
    • 이메일 검증 관련 새로운 필드 및 메서드를 추가하여 검증 구조를 개선했습니다.
    • 통합 테스트를 추가하여 이메일 검증 서비스의 신뢰성을 높였습니다.
  • Bug Fixes

    • 이메일 인증 토큰 검증 로직을 강화하여, 만료된 토큰 처리 및 적절한 예외를 발생시킵니다.

@seulgi99 seulgi99 added the ♻️ refactor 기능 개선 label Jul 23, 2024
@seulgi99 seulgi99 self-assigned this Jul 23, 2024
@seulgi99 seulgi99 requested a review from a team as a code owner July 23, 2024 15:03
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 bot commented Jul 23, 2024

## Walkthrough

이번 변경 사항은 이메일 인증 프로세스를 개선하고, 사용자 대시보드 응답에 대학 이메일 인증 상태를 추가하는 데 중점을 두었습니다. Redis에 인증 정보를 저장하고, 해당 정보를 기반으로 이메일 전송 여부를 판단하는 로직이 도입되었습니다. 이러한 변경은 사용자 경험을 향상시키고, 보다 명확한 인증 상태 관리를 가능하게 합니다.

## Changes

| 파일 | 변경 요약 |
|------|-----------|
| `src/main/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationService.java`, `src/main/java/com/gdschongik/gdsc/domain/member/application/OnboardingMemberService.java` | 이메일 인증 관련 기능 강화 및 사용자 대시보드에 인증 상태 추가. Redis 사용을 통한 데이터 관리 개선. |
| `src/test/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationServiceTest.java` | 이메일 인증 서비스에 대한 통합 테스트 추가. |
| `src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java` | 이메일 전송 실패에 대한 새로운 오류 코드 추가. |
| `build.gradle` | 테스트 환경 설정 및 `testcontainers` 라이브러리 의존성 추가. |

## Assessment against linked issues

| Objective | Addressed | Explanation |
|-----------|-----------|-------------|
| 이메일 전송 여부 추가 ( #470 ) ||  |
| Redis에 인증 정보 저장 및 조회 ( #470 ) ||  |
| 대시보드에 인증 상태 포함 ( #470 ) ||  |

> 🐇 변화의 춤을 춰요,  
> 이메일 인증의 빛을 가져와,  
> Redis에 저장, 확인해요,  
> 대시보드에서 기쁨을 주며,  
> 인증이 완료되면 모두 환호해요!

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>.
    • 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 generate interesting stats about this repository and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @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 as 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.

Additionally, you can add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

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

@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

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between e45ea44 and c699d39.

Files selected for processing (13)
  • src/main/java/com/gdschongik/gdsc/domain/discord/application/listener/PingpongListener.java (1 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationLinkSendService.java (3 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationService.java (3 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/email/dao/UnivEmailVerificationRepository.java (1 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/email/domain/UnivEmailVerification.java (1 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/member/application/OnboardingMemberService.java (3 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/member/dto/MemberFullDto.java (2 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/member/dto/UnivVerificationStatus.java (1 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/member/dto/response/MemberDashboardResponse.java (2 hunks)
  • src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java (1 hunks)
  • src/main/resources/application-security.yml (1 hunks)
  • src/test/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationServiceTest.java (1 hunks)
  • src/test/java/com/gdschongik/gdsc/global/common/constant/MemberConstant.java (1 hunks)
Files skipped from review due to trivial changes (3)
  • src/main/java/com/gdschongik/gdsc/domain/discord/application/listener/PingpongListener.java
  • src/main/java/com/gdschongik/gdsc/domain/email/dao/UnivEmailVerificationRepository.java
  • src/main/java/com/gdschongik/gdsc/domain/member/dto/UnivVerificationStatus.java
Additional comments not posted (28)
src/test/java/com/gdschongik/gdsc/global/common/constant/MemberConstant.java (1)

8-8: 이메일 주소 업데이트 확인

UNIV_EMAIL 상수의 값이 [email protected]에서 [email protected]로 변경되었습니다. 이 변경 사항이 의도된 것인지 확인해 주세요.

src/main/resources/application-security.yml (3)

18-18: JWT 액세스 토큰 시크릿 값 업데이트

ACCESS_TOKEN의 시크릿 값이 구체적인 문자열로 업데이트되었습니다. 이 값이 올바르게 설정되었는지 확인해 주세요.


21-21: JWT 리프레시 토큰 시크릿 값 업데이트

REFRESH_TOKEN의 시크릿 값이 구체적인 문자열로 업데이트되었습니다. 이 값이 올바르게 설정되었는지 확인해 주세요.


24-24: 이메일 인증 토큰 시크릿 값 업데이트

EMAIL_VERIFICATION_TOKEN의 시크릿 값이 구체적인 문자열로 업데이트되었습니다. 이 값이 올바르게 설정되었는지 확인해 주세요.

src/main/java/com/gdschongik/gdsc/domain/email/domain/UnivEmailVerification.java (5)

3-4: Builder 패턴 도입

@Builder 어노테이션이 추가되어 객체 생성이 더 명확해졌습니다. 이 변경 사항이 의도된 것인지 확인해 주세요.


17-17: verificationToken 필드 추가

verificationToken 필드가 추가되었습니다. 이 변경 사항이 데이터 모델에 맞는지 확인해 주세요.


20-20: TTL 필드 이름 변경

timeToLiveInSeconds 필드가 ttl로 이름이 변경되었습니다. 이 변경 사항이 코드 전체에서 일관되게 반영되었는지 확인해 주세요.


22-27: 프라이빗 생성자 도입

프라이빗 생성자가 도입되어 객체 생성이 더 안전해졌습니다. 이 변경 사항이 의도된 것인지 확인해 주세요.


29-35: 정적 팩토리 메서드 추가

of 정적 팩토리 메서드가 추가되어 객체 생성이 더 간편해졌습니다. 이 변경 사항이 의도된 것인지 확인해 주세요.

src/main/java/com/gdschongik/gdsc/domain/member/dto/response/MemberDashboardResponse.java (2)

5-5: 적절한 import 추가

UnivVerificationStatus의 import가 적절하게 추가되었습니다.


16-22: 메서드 시그니처 업데이트 확인

of 메서드가 UnivVerificationStatus를 포함하도록 업데이트되었습니다. 새로운 매개변수를 적절히 처리하고 있습니다.

src/main/java/com/gdschongik/gdsc/domain/member/dto/MemberFullDto.java (3)

3-3: 적절한 import 추가

RequirementStatusSchema의 import가 적절하게 추가되었습니다.

Also applies to: 8-8


12-22: 생성자 및 메서드 시그니처 업데이트 확인

생성자와 of 메서드가 MemberAssociateRequirementDtoUnivVerificationStatus를 포함하도록 업데이트되었습니다. 새로운 매개변수를 적절히 처리하고 있습니다.


49-63: 새로운 record 추가 확인

MemberAssociateRequirementDto record가 새로 추가되었습니다. 이 record는 적절하게 정의되어 있으며 코드와 잘 통합되고 있습니다.

src/main/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationService.java (3)

6-7: 적절한 import 추가

UnivEmailVerificationRepositoryHongikUnivEmailValidator의 import가 적절하게 추가되었습니다.


39-41: 새로운 메서드 추가 확인

getUnivEmailVerificationFromRedis 메서드가 새로 추가되었습니다. 이 메서드는 적절하게 정의되어 있으며 코드와 잘 통합되고 있습니다.


58-69: 새로운 메서드 추가 확인

validateUnivEmailVerification 메서드가 새로 추가되었습니다. 이 메서드는 적절하게 정의되어 있으며 코드와 잘 통합되고 있습니다.

src/test/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationServiceTest.java (2)

41-54: 테스트 케이스가 적절합니다.

레디스에 이메일 인증 정보가 존재하지 않을 때의 예외 처리를 잘 테스트하고 있습니다.


56-75: 테스트 케이스가 적절합니다.

인증 토큰과 레디스에 존재하는 인증 정보의 토큰이 다를 때의 예외 처리를 잘 테스트하고 있습니다.

src/main/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationLinkSendService.java (5)

5-5: 필요한 import 문입니다.

UnivEmailVerificationRepository를 사용하기 위해 필요한 import 문입니다.


11-11: 필요한 import 문입니다.

JwtProperty를 사용하기 위해 필요한 import 문입니다.


29-29: 필요한 멤버 변수입니다.

univEmailVerificationRepository는 새로운 기능을 위해 필요한 멤버 변수입니다.


36-36: 필요한 멤버 변수입니다.

jwtProperty는 새로운 기능을 위해 필요한 멤버 변수입니다.


67-78: 메서드 수정이 적절합니다.

generateVerificationToken 메서드는 현재 멤버를 가져오고, 인증 토큰을 생성하며, UnivEmailVerification 객체를 생성하고 이를 저장소에 저장하도록 수정되었습니다. 이러한 변경은 새로운 기능을 위해 필요합니다.

src/main/java/com/gdschongik/gdsc/domain/member/application/OnboardingMemberService.java (3)

10-10: 필요한 import 문입니다.

UnivEmailVerificationService를 사용하기 위해 필요한 import 문입니다.


41-41: 필요한 멤버 변수입니다.

univEmailVerificationService는 새로운 기능을 위해 필요한 멤버 변수입니다.


70-87: 메서드 수정이 적절합니다.

getDashboard 메서드는 이제 멤버의 요구 사항과 레디스에 있는 인증 기록의 존재 여부에 따라 대학 인증 상태를 결정하는 로직을 포함합니다. 이러한 변경은 새로운 기능을 위해 필요합니다.

src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java (1)

59-59: 추가된 EMAIL_NOT_SENT 오류 코드 확인

새로운 오류 코드 EMAIL_NOT_SENT는 이메일 인증 메일이 발송되지 않은 경우를 처리하기 위해 추가되었습니다. 메시지가 명확하고 다른 메시지와 일관성이 있습니다.

@seulgi99 seulgi99 changed the title Refactor/470 email verification modify refactor: 인증시 학교 이메일 인증 메일 전송 여부 판단 로직 추가 Jul 23, 2024
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

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between c699d39 and b8d1c98.

Files selected for processing (3)
  • build.gradle (1 hunks)
  • src/test/java/com/gdschongik/gdsc/config/TestRedisConfig.java (1 hunks)
  • src/test/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationServiceTest.java (1 hunks)
Files skipped from review as they are similar to previous changes (1)
  • src/test/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationServiceTest.java
Additional comments not posted (5)
src/test/java/com/gdschongik/gdsc/config/TestRedisConfig.java (4)

3-6: 필요한 새로운 import 문들

새로운 import 문들은 BeforeAllCallback, ExtensionContext, GenericContainer, DockerImageName를 포함합니다. 이들은 테스트 컨테이너 설정에 필요합니다.


8-8: 클래스 선언 변경

클래스가 이제 BeforeAllCallback 인터페이스를 구현합니다. 이는 모든 테스트 실행 전에 Redis 컨테이너를 설정하기 위함입니다.


9-11: Redis 설정 변수들

Redis 이미지와 포트를 위한 상수 및 GenericContainer 인스턴스가 올바르게 정의되었습니다.


13-19: beforeAll 메서드 구현

이 메서드는 Redis 컨테이너를 시작하고, Redis 연결을 위한 시스템 속성을 설정합니다. 올바르게 구현되었습니다.

build.gradle (1)

63-63: 새로운 테스트 의존성 추가

testcontainers 라이브러리를 위한 새로운 테스트 구현 의존성이 추가되었습니다. 이는 통합 테스트를 위한 컨테이너화된 환경을 제공하는 데 필요합니다.

Copy link
Member

@AlmondBreez3 AlmondBreez3 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.

확인했습니다

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

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between b8d1c98 and 96caead.

Files selected for processing (6)
  • src/main/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationService.java (3 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/member/application/OnboardingMemberService.java (4 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/member/domain/AssociateRequirement.java (1 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/member/dto/MemberFullDto.java (2 hunks)
  • src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java (1 hunks)
  • src/test/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationServiceTest.java (1 hunks)
Files skipped from review due to trivial changes (1)
  • src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java
Files skipped from review as they are similar to previous changes (3)
  • src/main/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationService.java
  • src/main/java/com/gdschongik/gdsc/domain/member/application/OnboardingMemberService.java
  • src/test/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationServiceTest.java
Additional comments not posted (5)
src/main/java/com/gdschongik/gdsc/domain/member/dto/MemberFullDto.java (4)

12-16: 좋습니다!

새로운 매개변수와 주석이 추가되어 데이터 모델의 명확성과 기능이 향상되었습니다.


49-55: 좋습니다!

새로운 레코드가 데이터 구조를 개선하고 명확성을 높였습니다.


17-22: 새로운 정적 팩토리 메서드 사용 확인

새로운 정적 팩토리 메서드 of의 사용이 올바른지 확인하십시오.

Verification successful

새로운 정적 팩토리 메서드 사용 확인

새로운 정적 팩토리 메서드 ofMemberDashboardResponse 클래스에서 올바르게 사용되고 있습니다. 이로써 해당 메서드의 사용이 확인되었습니다.

  • src/main/java/com/gdschongik/gdsc/domain/member/dto/response/MemberDashboardResponse.java
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the usage of the new static factory method `of`.

# Test: Search for the usage of the method. Expect: Only occurrences of the new method.
rg --type java -A 5 $'MemberFullDto.of'

Length of output: 1488


56-62: 새로운 정적 메서드 사용 확인

새로운 정적 메서드 of의 사용이 올바른지 확인하십시오.

Verification successful

새로운 정적 메서드 사용 확인

새로운 정적 메서드 of의 사용이 올바른 것으로 확인되었습니다. 해당 메서드는 MemberFullDto 클래스 내에서 적절하게 사용되고 있습니다.

  • MemberFullDto 클래스에서 MemberAssociateRequirementDto 객체를 생성하는 데 사용됨.
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the usage of the new static method `of`.

# Test: Search for the usage of the method. Expect: Only occurrences of the new method.
rg --type java -A 5 $'MemberAssociateRequirementDto.of'

Length of output: 1516


Script:

#!/bin/bash
# Description: Gather more context around the usage of the `of` method within `MemberFullDto.java`.

# Display 10 lines before and after the usage of the method for better context.
rg --type java -A 10 -B 10 $'MemberAssociateRequirementDto.of' src/main/java/com/gdschongik/gdsc/domain/member/dto/MemberFullDto.java

Length of output: 2144

src/main/java/com/gdschongik/gdsc/domain/member/domain/AssociateRequirement.java (1)

76-76: 접근 제한자 변경 확인

isUnivSatisfied 메서드의 접근 제한자가 private에서 public으로 변경되었습니다. 이 변경이 필요한지 확인하십시오.

Verification successful

접근 제한자 변경 확인

isUnivSatisfied 메서드는 AssociateRequirement 클래스 내부와 OnboardingMemberService 클래스에서 사용됩니다. 외부 클래스에서의 사용을 위해 접근 제한자를 private에서 public으로 변경하는 것이 필요합니다.

  • AssociateRequirement 클래스 내부 사용
  • OnboardingMemberService 클래스 외부 사용
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the usage of the `isUnivSatisfied` method.

# Test: Search for the usage of the method. Expect: Only occurrences of the method with the new access modifier.
rg --type java -A 5 $'isUnivSatisfied'

Length of output: 2898

Long memberId, MemberRole role, MemberBasicInfoDto basicInfo, AssociateRequirement associateRequirement) {
public static MemberFullDto from(Member member) {
Long memberId,
@Schema(description = "멤버 역할", implementation = MemberRole.class) MemberRole role,
Copy link
Member

Choose a reason for hiding this comment

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

개인적인 궁금함인데 implementation = MemberRole.class 와 같이 지정하면 어떤 효과가 있나요?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

프론트에서 사용하는지는 모르겠지만, 스웨거 api 문서를 통한 api스펙 자동적용 툴들 (swagger-typescript-api, auto-generated 이런것들)사용할때 해당 객체를 �인식하게 해줘요!

저는 그냥 저렇게 항상 구현하도록 하는게 익숙해져서 그렇긴한데, 만약 안쓴다면 지워도 좋을거같아요!

어떻게생각하시나여

Copy link
Member

Choose a reason for hiding this comment

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

저도 쓰는지 안쓰는지는 잘 몰라서 ㅎㅎ; 따로 요청사항 없는거 보면 안쓰는 것 같네요
일관성 측면에서 그냥 지우는게 나을듯 합니다

Copy link
Contributor Author

Choose a reason for hiding this comment

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

음 재현님 이거는 제가 이슈파서 따로 진행하는게 좋을거같아요! 이번 pr말고도 스터디쪾도 있어서요!!

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

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 96caead and de7697e.

Files selected for processing (1)
  • src/test/resources/application-test.yml (1 hunks)
Additional context used
Gitleaks
src/test/resources/application-test.yml

15-16: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.

(generic-api-key)

src/test/resources/application-test.yml Show resolved Hide resolved
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

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between de7697e and 08ba589.

Files selected for processing (2)
  • src/main/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationService.java (3 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/email/domain/HongikUnivEmailValidator.java (2 hunks)
Files skipped from review as they are similar to previous changes (1)
  • src/main/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationService.java
Additional comments not posted (2)
src/main/java/com/gdschongik/gdsc/domain/email/domain/HongikUnivEmailValidator.java (2)

28-32: 주석이 잘 작성되었습니다.

주석이 함수의 동작을 명확하게 설명하고 있습니다.


33-40: 코드가 잘 작성되었습니다.

이 메서드는 이메일 인증 토큰을 검증하는 로직을 포함하고 있으며, 두 가지 주요 에러 케이스를 잘 처리하고 있습니다.

CustomException 처리가 올바른지 확인하세요.

CustomException이 올바르게 처리되고 있는지 확인하십시오.

Verification successful

CustomException 처리가 올바른지 확인되었습니다.

CustomException이 여러 파일에서 적절하게 처리되고 있음을 확인했습니다. 로그 기록, 응답 상태 설정, 값 반환 등 다양한 방식으로 예외 처리가 이루어지고 있습니다.

  • src/main/java/com/gdschongik/gdsc/global/security/JwtExceptionFilter.java
  • src/main/java/com/gdschongik/gdsc/domain/member/application/handler/MemberRegularEventHandler.java
  • src/main/java/com/gdschongik/gdsc/domain/member/application/handler/MemberAssociateEventHandler.java
  • src/main/java/com/gdschongik/gdsc/domain/coupon/domain/IssuedCoupon.java
  • src/main/java/com/gdschongik/gdsc/global/config/AuditorAwareImpl.java
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that CustomException is correctly handled in the codebase.

# Test: Search for CustomException handling. Expect: Proper handling in the codebase.
rg --type java 'catch \(CustomException'

Length of output: 649


Script:

#!/bin/bash
# Extract and display the catch blocks for CustomException from the identified files for review.

# Display the catch block in JwtExceptionFilter.java
rg -A 5 'catch \(CustomException' src/main/java/com/gdschongik/gdsc/global/security/JwtExceptionFilter.java

# Display the catch block in MemberRegularEventHandler.java
rg -A 5 'catch \(CustomException' src/main/java/com/gdschongik/gdsc/domain/member/application/handler/MemberRegularEventHandler.java

# Display the catch block in MemberAssociateEventHandler.java
rg -A 5 'catch \(CustomException' src/main/java/com/gdschongik/gdsc/domain/member/application/handler/MemberAssociateEventHandler.java

# Display the catch block in IssuedCoupon.java
rg -A 5 'catch \(CustomException' src/main/java/com/gdschongik/gdsc/domain/coupon/domain/IssuedCoupon.java

# Display the catch block in AuditorAwareImpl.java
rg -A 5 'catch \(CustomException' src/main/java/com/gdschongik/gdsc/global/config/AuditorAwareImpl.java

Length of output: 1364

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.

확인했습니다

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

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 08ba589 and feacf8d.

Files selected for processing (7)
  • src/main/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationLinkSendService.java (3 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationService.java (3 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/email/domain/EmailVerificationStatusService.java (1 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/email/domain/UnivEmailValidator.java (2 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/member/application/OnboardingMemberService.java (3 hunks)
  • src/test/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationServiceTest.java (1 hunks)
  • src/test/java/com/gdschongik/gdsc/domain/email/domain/UnivEmailValidatorTest.java (7 hunks)
Files skipped from review due to trivial changes (2)
  • src/test/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationServiceTest.java
  • src/test/java/com/gdschongik/gdsc/domain/email/domain/UnivEmailValidatorTest.java
Files skipped from review as they are similar to previous changes (2)
  • src/main/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationService.java
  • src/main/java/com/gdschongik/gdsc/domain/member/application/OnboardingMemberService.java
Additional comments not posted (5)
src/main/java/com/gdschongik/gdsc/domain/email/domain/UnivEmailValidator.java (2)

Line range hint 12-26:
로직 검토

메서드 validateSendUnivEmailVerificationLink의 로직은 도메인 불일치, 형식 불일치 및 중복을 확인하며, 견고한 로직을 가지고 있습니다.


33-41: 로직 검토

메서드 validateUnivEmailVerification의 로직은 토큰이 존재하는지와 현재 토큰과 일치하는지를 확인하며, 견고한 로직을 가지고 있습니다.

src/main/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationLinkSendService.java (3)

54-62: 로직 검토

메서드 send의 로직은 이메일을 검증하고, 인증 토큰을 생성하며, 인증 링크를 작성하고, 이메일을 발송합니다. 견고한 로직을 가지고 있습니다.


67-78: 로직 검토

메서드 generateVerificationToken의 로직은 현재 멤버를 가져오고, 토큰을 생성하며, UnivEmailVerification 객체를 생성하고 저장합니다. 견고한 로직을 가지고 있습니다.


80-81: 로직 검토

메서드 writeMailContentWithVerificationLink의 로직은 포맷된 문자열을 사용하여 인증 링크를 포함합니다. 견고한 로직을 가지고 있습니다.

Comment on lines +11 to +20
public UnivVerificationStatus determineStatus(
Member member, Optional<UnivEmailVerification> univEmailVerification) {
if (member.getAssociateRequirement().isUnivSatisfied()) {
return UnivVerificationStatus.SATISFIED;
} else {
return univEmailVerification.isPresent()
? UnivVerificationStatus.IN_PROGRESS
: UnivVerificationStatus.PENDING;
}
}
Copy link

Choose a reason for hiding this comment

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

로직 검토 및 테스트 추가 제안

메서드 determineStatus의 로직은 명확하고 의도한 기능과 일치합니다.

그러나, 이 메서드에 대한 단위 테스트가 없다면 추가하는 것이 좋습니다.

단위 테스트 코드를 생성하거나 GitHub 이슈를 열어 이 작업을 추적할까요?

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.

미리 어푸르브 해두겠습니다!
몇가지 확인 부탁드려요!

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.

마이너 코멘트 하나 있습니다
미리 승인해둘게요

build.gradle Outdated Show resolved Hide resolved
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

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between feacf8d and b767e9b.

Files selected for processing (5)
  • build.gradle (1 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationService.java (3 hunks)
  • src/main/java/com/gdschongik/gdsc/domain/member/application/OnboardingMemberService.java (3 hunks)
  • src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java (1 hunks)
  • src/test/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationServiceTest.java (1 hunks)
Files skipped from review due to trivial changes (1)
  • src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java
Files skipped from review as they are similar to previous changes (4)
  • build.gradle
  • src/main/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationService.java
  • src/main/java/com/gdschongik/gdsc/domain/member/application/OnboardingMemberService.java
  • src/test/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationServiceTest.java

@seulgi99 seulgi99 merged commit 3a41c97 into develop Jul 31, 2024
1 check passed
@seulgi99 seulgi99 deleted the refactor/470-email-verification-modify branch July 31, 2024 14:22
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.

✨ 학교 이메일 인증 메일 전송 여부 판단 로직 추가
4 participants