[개인 프로젝트] Valid 제약 추가

Turtle·2024년 9월 9일
0

개인 프로젝트 기록

목록 보기
12/15

👉문제 상황

회원가입 시 사용자 정보가 전혀 없는 상황에서 회원가입 버튼을 누를 경우 회원가입이 되는 문제가 발생했다.

♻️개선 코드

@Slf4j
// Spring 프레임워크 Validator 인터페이스 구현
public abstract class AbstractValidator<T> implements Validator {

	@Override
	public void validate(Object target, Errors errors) {
		try {
			doValidate((T) target, errors);
		} catch (RuntimeException e) {
			log.error("중복", e);
			throw e;
		}
	}

	@SuppressWarnings("unchecked")
	@Override
	public boolean supports(Class<?> clazz) {
		return true;
	}

	protected abstract void doValidate(final T dto, final Errors errors);
}

이메일 중복 검증

@RequiredArgsConstructor
@Component
public class CheckEmailValidator extends AbstractValidator<SignUpRequestDTO> {

	private final MemberRepository memberRepository;

	@Override
	protected void doValidate(SignUpRequestDTO dto, Errors errors) {
		if (memberRepository.existsByEmail(dto.getEmail())) {
			errors.rejectValue("email", "duplicate.email", "이미 사용중인 이메일입니다.");
		}
	}
}

사용자 이름 중복 검증

@RequiredArgsConstructor
@Component
public class CheckUsernameValidator extends AbstractValidator<SignUpRequestDTO>  {

	private final MemberRepository memberRepository;

	@Override
	protected void doValidate(SignUpRequestDTO dto, Errors errors) {
		if (memberRepository.existsByUsername(dto.getUsername())) {
			errors.rejectValue("username", "duplicate.username", "이미 가입한 사용자입니다.");
		}
	}
}

패스워드 검증(DTO에 검증 어노테이션을 추가하면 되겠지만 실패 시마다 매번 다른 메시지를 보여주어 이 부분을 해결해보고자 별도로 작성)

@Component
public class CheckPasswordValidator extends AbstractValidator<SignUpRequestDTO>{

	@Override
	protected void doValidate(SignUpRequestDTO dto, Errors errors) {

		// DTO 패스워드가 null이거나 비어있는 경우
        if (dto.getPassword() == null || dto.getPassword().trim().isEmpty()) {
			errors.rejectValue("password", "password.empty", "패스워드는 필수 입력 값입니다.");
        // DTO 패스워드 길이가 8자 미만이거나 20자를 넘어서는 경우
		} else if (dto.getPassword().length() < 8 || dto.getPassword().length() > 20) {
			errors.rejectValue("password", "password.size", "패스워드는 8자 이상, 20자 이하여야 합니다.");
		}
	}
}

0개의 댓글