gi_dor

회원가입 - 이메일 , 전화번호 <select> 본문

Back_End/SpringBoot

회원가입 - 이메일 , 전화번호 <select>

기돌 2024. 4. 23. 15:26
728x90

지금까지는 input type="text" 를 사용해 ' - ' 을 입력해서 입력했습니다

https://gi-dor.tistory.com/232

 

회원가입 - SpringSecurity , @Valid , MySQL , MyBatis

SpringSecurity - SecurityConfig @Configuration // 빈 설정 @EnableWebSecurity // 스프링 시큐리티 웹보안 활성화 @EnableMethodSecurity(prePostEnabled = true , securedEnabled = true) public class SecurityConfig { @Bean SecurityFilterChain filte

gi-dor.tistory.com

 

 

 

@Setter
@Getter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class UserSignupForm {

    private  String tel1;

    @Pattern(regexp="^[0-9]{4}$" , message = "유효한 전화번호 형식이 아닙니다")
    private  String tel2;

    @Pattern(regexp="^[0-9]{4}$" , message = "유효한 전화번호 형식이 아닙니다")
    private  String tel3;
    
    
    public User toEntity(PasswordEncoder passwordEncoder) {
        User user = new User();

        user.setId(id);
        user.setPassword(passwordEncoder.encode(password));
        user.setName(name);
        user.setEmail(email1 + "@" + email2);
        user.setTel(tel1 + "-" + tel2 + "-" + tel3 );
        user.setZipCode(zipCode);
        user.setAddress(address);
        user.setAddressDetail(addressDetail);

        return user;
    }
    
}

 

 

 

 public User registerUser(UserSignupForm form) {

        if (userMapper.selectUserById(form.getId()) != null) {
            throw new RuntimeException("이미 존재하는 아이디입니다: " + form.getId());
        }

        // 1 주민번호 : 1 이메일 : 다계정 일수도 있음

//        if (userMapper.selectUserByEmail(form.getEmail()) != null) {
//            throw new RuntimeException("이미 존재하는 이메일 입니다: " + form.getEmail());
//        }

        User user = form.toEntity(passwordEncoder);
        userMapper.insertUser(user);

        return user;
    }

  1개의 명의 : 1개의 이메일주소 : 다계정을 생각해서 이메일에 대해서는 중복값 입력되게 했습니다

 

@Mapper
public interface UserMapper {
   void insertUser(User user);
}

 

<insert id="insertUser" parameterType="com.example.bookhub.user.vo.User">
insert into USER (
    user_id ,
    user_password ,
    user_name ,
    user_email ,
    user_tel ,
    user_zip_code ,
    user_address,
    user_address_detail
    ) values (
      #{id} ,
      #{password} ,
      #{name} ,
      #{email},
      #{tel} ,
      #{zipCode},
      #{address},
      #{addressDetail}
    )
</insert>
 public User toEntity(PasswordEncoder passwordEncoder) {
        User user = new User();

        user.setId(id);
        user.setPassword(passwordEncoder.encode(password));
        user.setName(name);
        user.setEmail(email1 + "@" + email2);
        user.setTel(tel1 + "-" + tel2 + "-" + tel3 );
        user.setZipCode(zipCode);
        user.setAddress(address);
        user.setAddressDetail(addressDetail);

        return user;
    }

toEntity() 메서드로 user 클래스에 tel 에 저장되므로 쿼리문에 #{ tel } 을 사용하면됩니다.

 

@PostMapping("/join")
    public String userJoin(@ModelAttribute("userSignupForm")
                           @Valid UserSignupForm form ,
                           BindingResult errors ) {
        // 유효성 검사에서 오류가 발생했는지 확인하고, 
        // 오류가 있다면 사용자 등록 폼을 다시 보여주는 "user/registerForm" 뷰로 이동
        if (errors.hasErrors()) {
            return "user/registerForm";
        }

        try {
            //  UserService를 사용하여 사용자를 등록하고, 결과로 생성된 사용자 객체를 받는다
            User user = userService.registerUser(form);
            
            //  사용자 등록이 성공했을 경우, 사용자의 ID를 포함한 URL로 리다이렉트
            return "redirect:/user/completed?id=" + user.getId();

        } catch (RuntimeException ex) {
            System.out.println(ex);
            
            // 예외를 로깅하기
            logger.error("에러 발생: ", ex); // 에러 레벨
            String message = ex.getMessage();

            if("id".equals(message)) {
                errors.rejectValue("id", null, "사용 할 수 없는 아이디");
            }     
            return "user/registerForm";
        }

    }

 

 

 

 

728x90