feat: login 서비스 구현
This commit is contained in:
@@ -5,6 +5,7 @@ import com.ticketing.server.user.domain.User;
|
||||
import com.ticketing.server.user.domain.repository.UserRepository;
|
||||
import com.ticketing.server.user.service.dto.ChangePasswordDTO;
|
||||
import com.ticketing.server.user.service.dto.DeleteUserDTO;
|
||||
import com.ticketing.server.user.service.dto.LoginDTO;
|
||||
import com.ticketing.server.user.service.dto.SignUpDTO;
|
||||
import com.ticketing.server.user.service.interfaces.UserService;
|
||||
import java.util.Optional;
|
||||
@@ -24,6 +25,20 @@ public class UserServiceImpl implements UserService {
|
||||
|
||||
private final UserRepository userRepository;
|
||||
|
||||
|
||||
@Override
|
||||
public User login(LoginDTO loginDto) {
|
||||
Optional<User> optionalUser = userRepository.findByEmailAndIsDeletedFalse(loginDto.getEmail());
|
||||
if (optionalUser.isEmpty()) {
|
||||
log.error("존재하지 않는 이메일 입니다. :: {}", loginDto);
|
||||
throw new NotFoundEmailException();
|
||||
}
|
||||
|
||||
User user = optionalUser.get();
|
||||
user.checkPassword(loginDto);
|
||||
return user;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public User register(@Valid SignUpDTO signUpDto) {
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.ticketing.server.user.service.dto;
|
||||
|
||||
import javax.validation.constraints.Email;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import lombok.Getter;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
|
||||
@Getter
|
||||
public class LoginDTO implements PasswordMatches {
|
||||
|
||||
public LoginDTO() {
|
||||
}
|
||||
|
||||
public LoginDTO(String email, String password, PasswordEncoder passwordEncoder) {
|
||||
this.email = email;
|
||||
this.password = password;
|
||||
this.passwordEncoder = passwordEncoder;
|
||||
}
|
||||
|
||||
@NotEmpty(message = "{validation.not.empty.email}")
|
||||
@Email(message = "{validation.email}")
|
||||
private String email;
|
||||
|
||||
@NotEmpty(message = "{validation.not.empty.password}")
|
||||
private String password;
|
||||
|
||||
private PasswordEncoder passwordEncoder;
|
||||
|
||||
@Override
|
||||
public boolean passwordMatches(String encodedPassword) {
|
||||
return passwordEncoder.matches(this.password, encodedPassword);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "LoginDTO{" +
|
||||
"email='" + email + '\'' +
|
||||
'}';
|
||||
}
|
||||
|
||||
}
|
||||
@@ -3,11 +3,14 @@ package com.ticketing.server.user.service.interfaces;
|
||||
import com.ticketing.server.user.domain.User;
|
||||
import com.ticketing.server.user.service.dto.ChangePasswordDTO;
|
||||
import com.ticketing.server.user.service.dto.DeleteUserDTO;
|
||||
import com.ticketing.server.user.service.dto.LoginDTO;
|
||||
import com.ticketing.server.user.service.dto.SignUpDTO;
|
||||
import javax.validation.Valid;
|
||||
|
||||
public interface UserService {
|
||||
|
||||
User login(@Valid LoginDTO loginDto);
|
||||
|
||||
User register(@Valid SignUpDTO signUpDto);
|
||||
|
||||
User delete(@Valid DeleteUserDTO deleteUserDto);
|
||||
|
||||
@@ -6,12 +6,14 @@ import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import com.ticketing.server.global.exception.NotFoundEmailException;
|
||||
import com.ticketing.server.global.exception.PasswordMismatchException;
|
||||
import com.ticketing.server.user.domain.User;
|
||||
import com.ticketing.server.user.domain.UserGrade;
|
||||
import com.ticketing.server.user.domain.repository.UserRepository;
|
||||
import com.ticketing.server.user.service.dto.ChangePasswordDTO;
|
||||
import com.ticketing.server.user.service.dto.DeleteUserDTO;
|
||||
import com.ticketing.server.user.service.dto.DeleteUserDtoTest;
|
||||
import com.ticketing.server.user.service.dto.LoginDTO;
|
||||
import com.ticketing.server.user.service.dto.SignUpDTO;
|
||||
import java.util.Optional;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
@@ -120,4 +122,44 @@ class UserServiceImplTest {
|
||||
assertThat(user).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("로그인 성공 시")
|
||||
void loginSuccess() {
|
||||
// given
|
||||
LoginDTO loginDTO = new LoginDTO("ticketing@gmail.com", "123456", DeleteUserDtoTest.CUSTOM_PASSWORD_ENCODER);
|
||||
when(userRepository.findByEmailAndIsDeletedFalse("ticketing@gmail.com")).thenReturn(Optional.of(user));
|
||||
|
||||
// when
|
||||
User user = userService.login(loginDTO);
|
||||
|
||||
// then
|
||||
assertThat(user).isInstanceOf(User.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("로그인 시도 시 이메일이 없을 경우")
|
||||
void loginNotFoundEmail() {
|
||||
// given
|
||||
LoginDTO loginDTO = new LoginDTO("ticketing1@gmail.com", "123456", DeleteUserDtoTest.CUSTOM_PASSWORD_ENCODER);
|
||||
when(userRepository.findByEmailAndIsDeletedFalse(any())).thenReturn(Optional.empty());
|
||||
|
||||
// when
|
||||
// then
|
||||
assertThatThrownBy(() -> userService.login(loginDTO))
|
||||
.isInstanceOf(NotFoundEmailException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("로그인 시도 시 패스워드가 일치하지 않을 경우")
|
||||
void loginPasswordMatchesFail() {
|
||||
// given
|
||||
LoginDTO loginDTO = new LoginDTO("ticketing@gmail.com", "1234567", DeleteUserDtoTest.CUSTOM_PASSWORD_ENCODER);
|
||||
when(userRepository.findByEmailAndIsDeletedFalse("ticketing@gmail.com")).thenReturn(Optional.of(user));
|
||||
|
||||
// when
|
||||
// then
|
||||
assertThatThrownBy(() -> userService.login(loginDTO))
|
||||
.isInstanceOf(PasswordMismatchException.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user