회원가입 기능 구현 - signUpDTO
package com.tenco.movie.dto;
import org.springframework.web.multipart.MultipartFile;
import com.tenco.movie.repository.model.User;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ToString
public class SignUpDTO {
private String loginId;
private String name;
private String password;
private String enterPassword;
private String email;
private String phoneNum;
private String year;
private String month;
private String day;
private String gender;
private String birthday;
private String username;
private String fullname;
private MultipartFile mFile;
private String originFileName;
private String uploadFileName;
// 2단계 로직 - User Object
public User toUser() {
return User.builder()
.loginId(this.loginId)
.name(this.name)
.password(this.password)
.email(this.email)
.phoneNum(this.phoneNum)
.birthDay(year + "-" + month + "-" + day)
.gender(this.gender)
.build();
}
public User kakaoUser() {
return User.builder()
.loginId(this.loginId)
.name(this.username)
.password(this.getPassword())
.email(this.email)
.fullname(this.getFullname())
.originFileName(this.originFileName)
.uploadFileName(this.uploadFileName)
.build();
}
}
UserController
/**
* 회원가입
*/
@GetMapping("/signUp")
public String signUp() {
return "user/signUp";
}
/**
* 회원가입
* @return
*/
@PostMapping("/signUp")
public String signUpPage(SignUpDTO dto, Model model) {
// 아이디 유효성 검사
// 아이디 비어져있을 때
if (dto.getLoginId() == null || dto.getLoginId().trim().isEmpty()) {
throw new DataDeliveryException(Define.ENTER_YOUR_ID, HttpStatus.BAD_REQUEST);
}
// 아이디 글자 제한
if (dto.getLoginId().length() < 7 || dto.getLoginId().length() > 16) {
throw new DataDeliveryException(Define.ENTER_ID_LENGTH, HttpStatus.BAD_REQUEST);
}
// 이름 유효성 검사
// 이름 비어져있을 때
if (dto.getName() == null || dto.getName().trim().isEmpty()) {
throw new DataDeliveryException(Define.ENTER_YOUR_NAME, HttpStatus.BAD_REQUEST);
}
// 비밀번호 유효성 검사
// 비밀번호가 없거나 비어 있을 때
if (dto.getPassword() == null || dto.getPassword().trim().isEmpty()) {
throw new DataDeliveryException(Define.ENTER_YOUR_PASSWORD, HttpStatus.BAD_REQUEST);
}
// 비밀번호 글자 제한
if (dto.getPassword().length() < 8 || dto.getPassword().length() > 20) {
throw new DataDeliveryException(Define.ENTER_PASSWORD_LENGTH, HttpStatus.BAD_REQUEST);
}
// 비밀번호 영어 포함
if (!dto.getPassword().matches(".*[A-Za-z].*")) {
throw new DataDeliveryException(Define.ENTER_PASSWORD_CHAR, HttpStatus.BAD_REQUEST);
}
// 비밀번호
if (!dto.getPassword().matches(".*\\d.*")) {
throw new DataDeliveryException(Define.ENTER_PASSWORD_NUM, HttpStatus.BAD_REQUEST);
}
// 비밀번호 특수 문자
if (!dto.getPassword().matches(".*[!@#$%^&*(),.?\":{}|<>].*")) {
throw new DataDeliveryException(Define.ENTER_PASSWORD_SPECIAL_CHAR, HttpStatus.BAD_REQUEST);
}
// 비밀번호 중복 검사
if (!dto.getPassword().equals(dto.getEnterPassword())) {
throw new DataDeliveryException(Define.NOT_VALIDATE_PASSWORD, HttpStatus.BAD_REQUEST);
}
// 이메일 유효성 검사
// 이메일이 없거나 빈칸일 때
if (dto.getEmail() == null || dto.getEmail().trim().isEmpty()) {
throw new DataDeliveryException(Define.ENTER_YOUR_EMAIL, HttpStatus.BAD_REQUEST);
}
// 휴대폰 번호 유효성 검사
// 휴대폰 번호가 없거나 빈킨일 때
if (dto.getPhoneNum() == null || dto.getPhoneNum().trim().isEmpty()) {
throw new DataDeliveryException(Define.ENTER_YOUR_PHONE_NUM, HttpStatus.BAD_REQUEST);
}
// 휴대폰 번호가 10~11자가 아닐 때
if (!dto.getPhoneNum().matches("\\d{10,11}")) {
throw new DataDeliveryException(Define.NOT_VALIDATE_PHONE_NUM, HttpStatus.BAD_REQUEST);
}
// 성별 유효성 검사
if (dto.getGender() == null || (!dto.getGender().equals("여") && !dto.getGender().equals("남"))) {
throw new DataDeliveryException(Define.ENTER_YOUR_GENDER, HttpStatus.BAD_REQUEST);
}
userService.createUser(dto);
return "redirect:/user/signIn";
}
UserService
/**
* 회원 가입 기능
* @param dto
*/
@Transactional
public void createUser(SignUpDTO dto) {
int result = 0;
try {
result = userRepository.insert(dto.toUser());
} catch (DataDeliveryException e) {
throw new DataDeliveryException(Define.DUPLICATION_NAME, HttpStatus.INTERNAL_SERVER_ERROR);
} catch (Exception e) {
throw new RedirectException(Define.UNKNOWN_ERROR, HttpStatus.SERVICE_UNAVAILABLE);
}
if (result != 1) {
throw new DataDeliveryException(Define.FAIL_TO_CREATE_USER, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
user.xml
<!-- 회원가입 -->
<insert id="insert">
insert into user_tb(login_id, name, password, email, phone_num, birth_day, gender)
values(#{loginId}, #{name}, #{password}, #{email}, #{phoneNum}, #{birthDay}, #{gender})
</insert>
728x90
'My Proect > 파이널 프로젝트 - CineDate' 카테고리의 다른 글
10일차 - 소셜 로그인 API 구현 ( 구글, 네이버, 카카오 ) (2) | 2024.09.03 |
---|---|
8일차 - 아이디, 비밀번호 찾기 화면 및 기능 구현 (3) | 2024.09.02 |
3일차 - 로그인 기능 구현 (0) | 2024.08.27 |
2일차 - 푸터 화면 구성 및 회원가입 기능 구현 (0) | 2024.08.27 |
1일차 회원가입, 로그인 화면 구현 (1) | 2024.08.27 |