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: 회원가입 비즈니스 로직 구현 #34

Merged
merged 28 commits into from
Aug 26, 2024
Merged

feat: 회원가입 비즈니스 로직 구현 #34

merged 28 commits into from
Aug 26, 2024

Conversation

uijin-j
Copy link
Collaborator

@uijin-j uijin-j commented Aug 25, 2024

🎟️ 관련 이슈

Resolves #33

👩‍💻 구현 내용

  • 랜덤한 6자리 숫자를 생성하는 VerificationCodeGenerator 유틸 클래스 생성
  • MailService 인터페이스 생성 및 SimpleMailService 구현체 추가 (단순 로깅만 하는 클래스)
  • Email, Password 값 객체 생성
  • Email, Password 값 객체 테스트 코드 작성
  • 회원가입 비즈니스 로직 구현
  • user → member 패키지명 변경

💬 코멘트

  • 아직 다은님이 올리신 PR이 머지가 안돼서, SecurityConfig는 임의로 추가해 놨습니다!
  • 회의 때 이야기 나눈 것 처럼 회원가입 완료 후 이벤트가 발송되면, 비동기적으로 인증 코드를 메일로 발송합니다 💌
  • 서비스 테스트 코드는 뺐는데도, 코드가 많네요ㅠ 죄송합니다😭

💭 고려한 점

  • 이메일 형식 검증, 일부 비밀번호 조건 검증(조건 2. 숫자, 문자, 특수문자 중 2가지 이상을 포함해야 합니다.)는 정규식으로 해결했는데, 조건 3번(3회 이상 연속되는 문자 사용이 불가합니다.)은 정규식으로 처리하기 까다로워서, O(n) 정도의 시간 복잡도가 소요되는 방식으로 직접 구현했습니다..! (혹시 더 좋은 아이디어가 있다면 의견 공유해주세요🥹)
  • 이메일과 비밀번호는 유효성 검증이 꽤 복잡해서 VO로 뺐습니다!

uijin-j added 25 commits August 25, 2024 19:22
signUp()메서드 인자에 @RequestBody 애너테이션 추가
- 첫번째 숫자는 0일 수 없었던 기존 문제 해결
@uijin-j uijin-j added the 💫 enhancement New feature or request label Aug 25, 2024
@uijin-j uijin-j requested a review from toughCircle August 25, 2024 15:18
@uijin-j uijin-j self-assigned this Aug 25, 2024
Copy link

📊 Jacoco Test Coverage

Overall Project 23.47% -9.67% 🍏
Files changed 58.33% 🍏

File Coverage
MemberStatus.java 100% 🍏
SecurityConfig.java 100% 🍏
PasswordEncoderConfig.java 100% 🍏
Password.java 100% 🍏
Email.java 100% 🍏
BadRequestException.java 100% 🍏
BusinessException.java 100% 🍏
StatusCode.java 94.44% 🍏
MemberEventPublisher.java 23.53% -76.47% 🍏
SimpleMailService.java 17.95% -82.05% 🍏
Member.java 17.65% -82.35% 🍏
VerificationCodeGenerator.java 0% 🍏
MemberSignupReq.java 0% 🍏
MemberService.java 0% 🍏
PostController.java 0% 🍏
PostStatisticsController.java 0% 🍏
VerificationCode.java 0% 🍏
BaseApiResponse.java 0% 🍏
GlobalExceptionHandler.java 0% 🍏
MemberController.java 0% 🍏
DataNotFoundException.java 0% 🍏
ForbiddenException.java 0% 🍏
DuplicateResourceException.java 0% 🍏
SignedUpEvent.java 0% 🍏
MemberEventListener.java 0% 🍏

Copy link
Collaborator

Choose a reason for hiding this comment

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

👍

Copy link
Collaborator

@hye-on hye-on 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
Collaborator

@jooda00 jooda00 left a comment

Choose a reason for hiding this comment

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

👍👍 코드 가독성이 너무 좋고 클래스 별로 책임도 명확하게 작성하신 것 같아서 많이 배워갑니다!!! 고생하셨어요😊

&& plainPassword.charAt(i) == plainPassword.charAt(i - 2)) {
return true;
}
}
Copy link
Collaborator

Choose a reason for hiding this comment

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

💭 이렇게 구현하는게 가장 좋은 방법 같아요! 만약 연속된 문자열 개수가 늘어나면 연속된 문자열 개수를 count로 받고, isConsecutive라는 boolean 타입 변수 하나 선언해서

for (int i = count - 1; i < plainPassword.length(); i++) {
        boolean isConsecutive = true; // 연속성을 체크

        for (int j = 1; j < count; j++) {
            if (plainPassword.charAt(i) != plainPassword.charAt(i - j)) {
                isConsecutive = false;
                break; // 연속성이 끊기면 반복 종료
            }
        }

        if (isConsecutive) {
            return true; // 연속된 문자가 있으면 true 반환
        }
    }

이렇게 해도 될 것 같은데 지금으로선 오히려 복잡해지는 것 같네요!
의진님께서 구현하신 방향이 좋습니다👍

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

확실이 이 방법이 확장성이 좋네요👍🏻
추후 리팩토링 시 적용해 보겠습니다:) 의견 감사합니당🙇🏻‍♀️

import team05.integrated_feed_backend.module.member.entity.Member;
import team05.integrated_feed_backend.module.member.entity.vo.Email;

@Repository
Copy link
Collaborator

Choose a reason for hiding this comment

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

❓ 제가 알기로는JpaRepository 사용하면 @Repository 어노테이션이 없어도 된다고 아는데 작성하신 이유 여쭤보고 싶습니다!(제가 정확하게 아는건 아니라서 잘못 알고있다면 말씀해주세요!)

Copy link
Collaborator Author

@uijin-j uijin-j Aug 26, 2024

Choose a reason for hiding this comment

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

습관적으로 붙인 것 같아요 허허😭 350460a 반영했습니다!

Copy link
Collaborator

@toughCircle toughCircle left a comment

Choose a reason for hiding this comment

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

덕분에 VO 관련 내용도 알 수 있었습니다! 고생많으셨습니다 👍

Copy link

📊 Jacoco Test Coverage

Overall Project 43.5% -5.5% 🍏
Files changed 51.76% 🍏

File Coverage
MemberStatus.java 100% 🍏
SecurityConfig.java 100% 🍏
Password.java 100% 🍏
Email.java 100% 🍏
BadRequestException.java 100% 🍏
BusinessException.java 100% 🍏
DataNotFoundException.java 100% 🍏
StatusCode.java 96.67% 🍏
MemberEventPublisher.java 23.53% -76.47% 🍏
SimpleMailService.java 18.42% -81.58% 🍏
Member.java 12% -88% 🍏
VerificationCodeGenerator.java 0% 🍏
MemberSignupReq.java 0% 🍏
MemberService.java 0% 🍏
VerificationCode.java 0% 🍏
MemberController.java 0% 🍏
ForbiddenException.java 0% 🍏
DuplicateResourceException.java 0% 🍏
SignedUpEvent.java 0% 🍏
MemberEventListener.java 0% 🍏

@uijin-j uijin-j merged commit 84f7922 into main Aug 26, 2024
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
💫 enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

회원가입 서비스 구현
4 participants