From 83e8dcc9d6a106e3152cc2b4e03d3bfb923f6eb3 Mon Sep 17 00:00:00 2001 From: dongHyo Date: Sun, 22 May 2022 21:44:49 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=ED=8C=A8=EC=8A=A4=EC=9B=8C=EB=93=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ticketing/server/user/domain/User.java | 19 +++++++-- .../user/service/dto/ChangePassword.java | 40 +++++++++++++++++++ .../server/user/service/dto/DeleteUser.java | 5 ++- .../user/service/dto/PasswordMatches.java | 7 ++++ .../user/service/dto/DeleteUserTest.java | 2 +- 5 files changed, 67 insertions(+), 6 deletions(-) create mode 100644 server/src/main/java/com/ticketing/server/user/service/dto/ChangePassword.java create mode 100644 server/src/main/java/com/ticketing/server/user/service/dto/PasswordMatches.java diff --git a/server/src/main/java/com/ticketing/server/user/domain/User.java b/server/src/main/java/com/ticketing/server/user/domain/User.java index 5ded586..7f88de4 100644 --- a/server/src/main/java/com/ticketing/server/user/domain/User.java +++ b/server/src/main/java/com/ticketing/server/user/domain/User.java @@ -4,7 +4,9 @@ import com.ticketing.server.global.dto.repository.AbstractEntity; import com.ticketing.server.global.exception.AlreadyDeletedException; import com.ticketing.server.global.exception.PasswordMismatchException; import com.ticketing.server.global.validator.constraints.Phone; +import com.ticketing.server.user.service.dto.ChangePassword; import com.ticketing.server.user.service.dto.DeleteUser; +import com.ticketing.server.user.service.dto.PasswordMatches; import java.time.LocalDateTime; import javax.persistence.Column; import javax.persistence.Entity; @@ -61,13 +63,24 @@ public class User extends AbstractEntity { throw new AlreadyDeletedException("이미 탈퇴된 회원 입니다."); } - if (!deleteUser.passwordEquals(password)) { - throw new PasswordMismatchException(); - } + comparePassword(deleteUser); isDeleted = true; deletedAt = LocalDateTime.now(); return this; } + public User modifyPassword(ChangePassword changePassword) { + comparePassword(changePassword); + + this.password = changePassword.getEncodePassword(); + return this; + } + + private void comparePassword(PasswordMatches passwordMatches) { + if (!passwordMatches.passwordMatches(password)) { + throw new PasswordMismatchException(); + } + } + } diff --git a/server/src/main/java/com/ticketing/server/user/service/dto/ChangePassword.java b/server/src/main/java/com/ticketing/server/user/service/dto/ChangePassword.java new file mode 100644 index 0000000..17bde8a --- /dev/null +++ b/server/src/main/java/com/ticketing/server/user/service/dto/ChangePassword.java @@ -0,0 +1,40 @@ +package com.ticketing.server.user.service.dto; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotEmpty; +import org.springframework.security.crypto.password.PasswordEncoder; + +public class ChangePassword implements PasswordMatches { + + public ChangePassword(String email, String oldPassword, String newPassword, PasswordEncoder passwordEncoder) { + this.email = email; + this.oldPassword = oldPassword; + this.newPassword = newPassword; + this.passwordEncoder = passwordEncoder; + } + + @NotEmpty(message = "{validation.not.empty.email}") + @Email(message = "{validation.email}") + private String email; + + @NotEmpty(message = "{validation.not.empty.oldpassword}") + private String oldPassword; + + @NotEmpty(message = "{validation.not.empty.newpassword}") + private String newPassword; + + private PasswordEncoder passwordEncoder; + + public String getEmail() { + return email; + } + + @Override + public boolean passwordMatches(String password) { + return passwordEncoder.matches(oldPassword, password); + } + + public String getEncodePassword() { + return passwordEncoder.encode(newPassword); + } +} diff --git a/server/src/main/java/com/ticketing/server/user/service/dto/DeleteUser.java b/server/src/main/java/com/ticketing/server/user/service/dto/DeleteUser.java index a1320d2..6e0c4ab 100644 --- a/server/src/main/java/com/ticketing/server/user/service/dto/DeleteUser.java +++ b/server/src/main/java/com/ticketing/server/user/service/dto/DeleteUser.java @@ -4,7 +4,7 @@ import javax.validation.constraints.Email; import javax.validation.constraints.NotEmpty; import org.springframework.security.crypto.password.PasswordEncoder; -public class DeleteUser { +public class DeleteUser implements PasswordMatches { public DeleteUser(String email, String inputPassword, PasswordEncoder passwordEncoder) { this.email = email; @@ -21,7 +21,8 @@ public class DeleteUser { private PasswordEncoder passwordEncoder; - public boolean passwordEquals(String password) { + @Override + public boolean passwordMatches(String password) { return passwordEncoder.matches(this.inputPassword, password); } diff --git a/server/src/main/java/com/ticketing/server/user/service/dto/PasswordMatches.java b/server/src/main/java/com/ticketing/server/user/service/dto/PasswordMatches.java new file mode 100644 index 0000000..7ef8538 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/user/service/dto/PasswordMatches.java @@ -0,0 +1,7 @@ +package com.ticketing.server.user.service.dto; + +@FunctionalInterface +public interface PasswordMatches { + + boolean passwordMatches(String password); +} diff --git a/server/src/test/java/com/ticketing/server/user/service/dto/DeleteUserTest.java b/server/src/test/java/com/ticketing/server/user/service/dto/DeleteUserTest.java index e39eb36..2de3185 100644 --- a/server/src/test/java/com/ticketing/server/user/service/dto/DeleteUserTest.java +++ b/server/src/test/java/com/ticketing/server/user/service/dto/DeleteUserTest.java @@ -31,7 +31,7 @@ public class DeleteUserTest { // when // then - assertThat(user.passwordEquals("123456")).isTrue(); + assertThat(user.passwordMatches("123456")).isTrue(); } }