Skip to content

Commit

Permalink
#42 - Refactor: 아이디/이메일 중복 커스텀 예외 생성, 회원가입시 중복 검사 로직 서비스단으로 이동
Browse files Browse the repository at this point in the history
  • Loading branch information
ahah525 committed Dec 13, 2022
1 parent 937eeb4 commit 0cfbc7f
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 10 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.example.mutbooks.app.member.controller;

import com.example.mutbooks.app.member.entity.Member;
import com.example.mutbooks.app.member.exception.EmailDuplicationException;
import com.example.mutbooks.app.member.exception.UsernameDuplicationException;
import com.example.mutbooks.app.member.form.JoinForm;
import com.example.mutbooks.app.member.form.ModifyForm;
import com.example.mutbooks.app.member.form.PwdModifyForm;
Expand Down Expand Up @@ -40,21 +42,15 @@ public String showJoin(JoinForm joinForm) {
@PreAuthorize("isAnonymous()")
@PostMapping("/join")
public String join(@Valid JoinForm joinForm, BindingResult bindingResult, HttpServletRequest request) throws ServletException {
// 아이디 중복 검사
Member oldMember = memberService.findByUsername(joinForm.getUsername());
if (oldMember != null) {
try {
memberService.join(joinForm);
} catch(UsernameDuplicationException e) {
bindingResult.rejectValue("username", "duplicated username", "중복된 아이디 입니다.");
return "member/join";
}
// 이메일 중복 검사
oldMember = memberService.findByEmail(joinForm.getEmail());
if(oldMember != null) {
} catch(EmailDuplicationException e) {
bindingResult.rejectValue("email", "duplicated email", "중복된 이메일 입니다.");
return "member/join";
}

Member member = memberService.join(joinForm);

// 회원가입 완료 후, 자동 로그인 처리
try {
request.login(joinForm.getUsername(), joinForm.getPassword());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.example.mutbooks.app.member.exception;

public class EmailDuplicationException extends RuntimeException {
private static final String MESSAGE = "중복된 이메일입니다.";

public EmailDuplicationException() {
super(MESSAGE);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.example.mutbooks.app.member.exception;

public class UsernameDuplicationException extends RuntimeException {
private static final String MESSAGE = "중복된 아이디입니다.";

public UsernameDuplicationException() {
super(MESSAGE);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,8 @@ public interface MemberRepository extends JpaRepository<Member, Long> {
Optional<Member> findByEmail(String email);

Optional<Member> findByUsernameAndEmail(String username, String email);

boolean existsByUsername(String username);

boolean existsByEmail(String email);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
import com.example.mutbooks.app.mail.service.EmailSenderService;
import com.example.mutbooks.app.member.entity.Member;
import com.example.mutbooks.app.member.entity.MemberExtra;
import com.example.mutbooks.app.member.exception.EmailDuplicationException;
import com.example.mutbooks.app.member.exception.PasswordNotMatchedException;
import com.example.mutbooks.app.member.exception.UsernameDuplicationException;
import com.example.mutbooks.app.member.form.JoinForm;
import com.example.mutbooks.app.member.form.ModifyForm;
import com.example.mutbooks.app.member.form.PwdModifyForm;
Expand Down Expand Up @@ -38,6 +40,9 @@ public class MemberService {

@Transactional
public Member join(JoinForm joinForm) {
checkUsernameDuplication(joinForm.getUsername());
checkEmailDuplication(joinForm.getEmail());

String token = Ut.genEmailToken();// 이메일 인증키 생성

Member member = MemberMapper.INSTANCE.JoinFormToEntity(joinForm);
Expand All @@ -58,6 +63,22 @@ public Member join(JoinForm joinForm) {
return member;
}

// 아이디 중복 검사
public void checkUsernameDuplication(String username) {
boolean isDuplicated = memberRepository.existsByUsername(username);
if(isDuplicated) {
throw new UsernameDuplicationException();
}
}

// 이메일 중복 검사
public void checkEmailDuplication(String email) {
boolean isDuplicated = memberRepository.existsByEmail(email);
if(isDuplicated) {
throw new EmailDuplicationException();
}
}

// 회원기본 정보 수정
@Transactional
public void modifyProfile(Member member, ModifyForm modifyForm) {
Expand Down

0 comments on commit 0cfbc7f

Please sign in to comment.