본문 바로가기

My Proect/파이널 프로젝트 - CineDate

5일차 - 회원가입 기능 구현

 

 

회원가입 기능 구현 - 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