Skip to content

Commit

Permalink
feat: 아이디 찾기 비즈니스 로직 추가(#28)
Browse files Browse the repository at this point in the history
아이디 찾기 요청은 인증 코드 발급 전화번호, 인증 코드를 포함한다.
아이디 찾기는 다음 과정을 거쳐 이뤄진다.
1. 발급 전화번호를 기반으로 인증 코드 redis에서 조회
2. 인증 코드 일치 확인
3. 전화번호 기반 사용자 조회
4. 확인한 인증 코드 삭제
5. 찾은 이메일을 응답으로 반환
  • Loading branch information
Minjae-An committed Mar 16, 2024
1 parent 1b8e780 commit f4193d8
Showing 1 changed file with 25 additions and 0 deletions.
25 changes: 25 additions & 0 deletions be/src/main/java/yeonba/be/login/service/LoginService.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
package yeonba.be.login.service;

import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import yeonba.be.exception.GeneralException;
import yeonba.be.exception.LoginException;
import yeonba.be.exception.UserException;
import yeonba.be.login.dto.request.UserIdInquiryRequest;
import yeonba.be.login.dto.request.UserPasswordInquiryRequest;
import yeonba.be.login.dto.request.UserPhoneNumberVerifyRequest;
import yeonba.be.login.dto.response.UserIdInquiryResponse;
import yeonba.be.user.entity.User;
import yeonba.be.user.repository.UserQuery;
import yeonba.be.util.EmailService;
Expand Down Expand Up @@ -71,4 +75,25 @@ public void sendVerificationCodeMessage(UserPhoneNumberVerifyRequest request) {
String message = String.format(VERIFICATION_CODE_MESSAGE, code);
smsService.sendMessage(phoneNumber, message);
}

@Transactional(readOnly = true)
public UserIdInquiryResponse findEmail(UserIdInquiryRequest request) {
String phoneNumber = request.getPhoneNumber();
String verificationCode = request.getVerificationCode();

// 인증 코드 조회
String foundVerificationCode = (String) redisUtil.getData(phoneNumber)
.orElseThrow(() -> new GeneralException(LoginException.VERIFICATION_CODE_NOT_FOUND));

// 인증 코드 일치 확인
if (!StringUtils.equals(foundVerificationCode, verificationCode)) {
throw new GeneralException(LoginException.VERIFICATION_CODE_NOT_MATCH);
}

// 핸드폰 번호 기반 사용자 조회 및 인증 코드 내역 삭제
User user = userQuery.findByPhoneNumber(phoneNumber);
redisUtil.deleteData(phoneNumber);

return new UserIdInquiryResponse(user.getEmail());
}
}

0 comments on commit f4193d8

Please sign in to comment.