From 4c904f0243a009cb344542a112e43c38a6ea9713 Mon Sep 17 00:00:00 2001 From: deltawing71911 Date: Wed, 17 Jan 2024 20:40:36 +0900 Subject: [PATCH 1/5] =?UTF-8?q?refactor:=20=EC=BB=A4=EC=8A=A4=ED=85=80?= =?UTF-8?q?=EC=97=90=EB=9F=AC=20=EC=B6=94=EA=B0=80,=20DTO=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84,=20=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC,=20=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit resolved #86 --- .../PasswordConfirmationException.java | 7 +++++++ .../yanabada/common/response/ErrorCode.java | 1 + .../controller/YanoljaPayController.java | 19 +++++++++++++++++++ .../dto/request/PayPasswordRequest.java | 19 +++++++++++++++++++ .../repository/YanoljaPayRepository.java | 9 +++++++++ .../payment/service/YanoljaPayService.java | 15 +++++++++++++++ 6 files changed, 70 insertions(+) create mode 100644 src/main/java/kr/co/fastcampus/yanabada/common/exception/PasswordConfirmationException.java create mode 100644 src/main/java/kr/co/fastcampus/yanabada/domain/payment/dto/request/PayPasswordRequest.java diff --git a/src/main/java/kr/co/fastcampus/yanabada/common/exception/PasswordConfirmationException.java b/src/main/java/kr/co/fastcampus/yanabada/common/exception/PasswordConfirmationException.java new file mode 100644 index 00000000..5ace294e --- /dev/null +++ b/src/main/java/kr/co/fastcampus/yanabada/common/exception/PasswordConfirmationException.java @@ -0,0 +1,7 @@ +package kr.co.fastcampus.yanabada.common.exception; + +import static kr.co.fastcampus.yanabada.common.response.ErrorCode.PASSWORD_CONFIRMATION_DOES_NOT_MATCH; + +public class PasswordConfirmationException extends BaseException { + public PasswordConfirmationException() { super(PASSWORD_CONFIRMATION_DOES_NOT_MATCH.getMessage()); } +} diff --git a/src/main/java/kr/co/fastcampus/yanabada/common/response/ErrorCode.java b/src/main/java/kr/co/fastcampus/yanabada/common/response/ErrorCode.java index 387d0f00..eb2fa291 100644 --- a/src/main/java/kr/co/fastcampus/yanabada/common/response/ErrorCode.java +++ b/src/main/java/kr/co/fastcampus/yanabada/common/response/ErrorCode.java @@ -31,6 +31,7 @@ public enum ErrorCode { CANNOT_NEGOTIATE_OWN_PRODUCT("자신이 등록한 상품을 네고할 순 없습니다."), CHAT_ROOM_NOT_FOUND_EXCEPTION("존재하지 않은 채팅방입니다."), INCORRECT_CHAT_ROOM_MEMBER("채팅방 멤버가 올바르지 않습니다."), + PASSWORD_CONFIRMATION_DOES_NOT_MATCH("입력한 비밀번호가 서로 일치하지 않습니다."), EMAIL_SEND_FAILED("이메일 전송에 실패하였습니다."), diff --git a/src/main/java/kr/co/fastcampus/yanabada/domain/payment/controller/YanoljaPayController.java b/src/main/java/kr/co/fastcampus/yanabada/domain/payment/controller/YanoljaPayController.java index 991254bb..5be9d495 100644 --- a/src/main/java/kr/co/fastcampus/yanabada/domain/payment/controller/YanoljaPayController.java +++ b/src/main/java/kr/co/fastcampus/yanabada/domain/payment/controller/YanoljaPayController.java @@ -1,11 +1,21 @@ package kr.co.fastcampus.yanabada.domain.payment.controller; +import jakarta.validation.Valid; +import kr.co.fastcampus.yanabada.common.exception.MemberNotFoundException; +import kr.co.fastcampus.yanabada.common.exception.PasswordConfirmationException; +import kr.co.fastcampus.yanabada.common.exception.YanoljaPayNotFoundException; import kr.co.fastcampus.yanabada.common.response.ResponseBody; +import kr.co.fastcampus.yanabada.domain.payment.dto.request.PayPasswordRequest; import kr.co.fastcampus.yanabada.domain.payment.dto.response.YanoljaPayHomeResponse; import kr.co.fastcampus.yanabada.domain.payment.service.YanoljaPayService; import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestAttribute; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -20,5 +30,14 @@ public class YanoljaPayController { public ResponseBody getYanoljaPay(@PathVariable Long memberId) { return ResponseBody.ok(yanoljaPayService.getYanoljaPay(memberId)); } + + @PostMapping("/payPassword/{memberId}") + public ResponseBody> setPayPassword( + @PathVariable("memberId") Long memberId, + @RequestBody @Valid PayPasswordRequest payPasswordRequest + ) { + yanoljaPayService.setPayPassword(memberId, payPasswordRequest); + return ResponseBody.ok(ResponseEntity.ok().build()); + } } diff --git a/src/main/java/kr/co/fastcampus/yanabada/domain/payment/dto/request/PayPasswordRequest.java b/src/main/java/kr/co/fastcampus/yanabada/domain/payment/dto/request/PayPasswordRequest.java new file mode 100644 index 00000000..6f32d3f3 --- /dev/null +++ b/src/main/java/kr/co/fastcampus/yanabada/domain/payment/dto/request/PayPasswordRequest.java @@ -0,0 +1,19 @@ +package kr.co.fastcampus.yanabada.domain.payment.dto.request; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Pattern; +import lombok.Builder; + +@Builder +public record PayPasswordRequest( + @NotBlank(message = "패스워드는 공백일 수 없습니다.") + @Pattern(regexp = "\\d{6}", message = "패스워드는 6글자이어야 합니다.") + String password, + @NotBlank(message = "확인용 패스워드도 공백일 수 없습니다.") + String confirmPassword +) { + + public boolean isPasswordMatch() { + return this.password.equals(this.confirmPassword); + } +} diff --git a/src/main/java/kr/co/fastcampus/yanabada/domain/payment/repository/YanoljaPayRepository.java b/src/main/java/kr/co/fastcampus/yanabada/domain/payment/repository/YanoljaPayRepository.java index 7e8d7ad9..0ef239f0 100644 --- a/src/main/java/kr/co/fastcampus/yanabada/domain/payment/repository/YanoljaPayRepository.java +++ b/src/main/java/kr/co/fastcampus/yanabada/domain/payment/repository/YanoljaPayRepository.java @@ -1,11 +1,20 @@ package kr.co.fastcampus.yanabada.domain.payment.repository; +import io.lettuce.core.dynamic.annotation.Param; +import jakarta.validation.constraints.Pattern; import java.util.Optional; import kr.co.fastcampus.yanabada.domain.member.entity.Member; import kr.co.fastcampus.yanabada.domain.payment.entity.YanoljaPay; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; public interface YanoljaPayRepository extends JpaRepository { + Optional findByMember(Member member); + + @Modifying + @Query("UPDATE YanoljaPay y SET y.simplePassword = :password WHERE y.member = :member") + void updateSimplePassword(@Param("member") Member member, @Param("password") String password); } diff --git a/src/main/java/kr/co/fastcampus/yanabada/domain/payment/service/YanoljaPayService.java b/src/main/java/kr/co/fastcampus/yanabada/domain/payment/service/YanoljaPayService.java index 8e8f2acb..057ef2c7 100644 --- a/src/main/java/kr/co/fastcampus/yanabada/domain/payment/service/YanoljaPayService.java +++ b/src/main/java/kr/co/fastcampus/yanabada/domain/payment/service/YanoljaPayService.java @@ -1,8 +1,11 @@ package kr.co.fastcampus.yanabada.domain.payment.service; +import kr.co.fastcampus.yanabada.common.exception.MemberNotFoundException; +import kr.co.fastcampus.yanabada.common.exception.PasswordConfirmationException; import kr.co.fastcampus.yanabada.common.exception.YanoljaPayNotFoundException; import kr.co.fastcampus.yanabada.domain.member.entity.Member; import kr.co.fastcampus.yanabada.domain.member.repository.MemberRepository; +import kr.co.fastcampus.yanabada.domain.payment.dto.request.PayPasswordRequest; import kr.co.fastcampus.yanabada.domain.payment.dto.response.YanoljaPayHomeResponse; import kr.co.fastcampus.yanabada.domain.payment.entity.YanoljaPay; import kr.co.fastcampus.yanabada.domain.payment.repository.YanoljaPayRepository; @@ -30,4 +33,16 @@ private YanoljaPayHomeResponse getYanoljaPay(Member member) { return YanoljaPayHomeResponse.from(yanoljaPay); } + + @Transactional + public void setPayPassword(Long memberId, PayPasswordRequest payPasswordRequest) { + if (!payPasswordRequest.isPasswordMatch()) { + throw new PasswordConfirmationException(); + } + + Member member = memberRepository.findById(memberId) + .orElseThrow(MemberNotFoundException::new); + + yanoljaPayRepository.updateSimplePassword(member, payPasswordRequest.password()); + } } \ No newline at end of file From be1cdeee851f4720b12533502c48567bdc79a793 Mon Sep 17 00:00:00 2001 From: deltawing71911 Date: Wed, 17 Jan 2024 20:47:33 +0900 Subject: [PATCH 2/5] =?UTF-8?q?refactor:=20=EB=A6=AC=EB=B7=B0=EB=8F=85=20?= =?UTF-8?q?=EC=B2=B4=ED=81=AC=EC=8A=A4=ED=83=80=EC=9D=BC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit resolved #86 --- .../common/exception/PasswordConfirmationException.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/kr/co/fastcampus/yanabada/common/exception/PasswordConfirmationException.java b/src/main/java/kr/co/fastcampus/yanabada/common/exception/PasswordConfirmationException.java index 5ace294e..3cf6646d 100644 --- a/src/main/java/kr/co/fastcampus/yanabada/common/exception/PasswordConfirmationException.java +++ b/src/main/java/kr/co/fastcampus/yanabada/common/exception/PasswordConfirmationException.java @@ -3,5 +3,7 @@ import static kr.co.fastcampus.yanabada.common.response.ErrorCode.PASSWORD_CONFIRMATION_DOES_NOT_MATCH; public class PasswordConfirmationException extends BaseException { - public PasswordConfirmationException() { super(PASSWORD_CONFIRMATION_DOES_NOT_MATCH.getMessage()); } + public PasswordConfirmationException() { + super(PASSWORD_CONFIRMATION_DOES_NOT_MATCH.getMessage()); + } } From 24f307f291b13e999da424fa9ee94aa1e7b9b99c Mon Sep 17 00:00:00 2001 From: deltawing71911 Date: Wed, 17 Jan 2024 21:49:58 +0900 Subject: [PATCH 3/5] =?UTF-8?q?refactor:=20url=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit resolved #86 --- .../domain/payment/controller/YanoljaPayController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/kr/co/fastcampus/yanabada/domain/payment/controller/YanoljaPayController.java b/src/main/java/kr/co/fastcampus/yanabada/domain/payment/controller/YanoljaPayController.java index 5be9d495..ad2f415c 100644 --- a/src/main/java/kr/co/fastcampus/yanabada/domain/payment/controller/YanoljaPayController.java +++ b/src/main/java/kr/co/fastcampus/yanabada/domain/payment/controller/YanoljaPayController.java @@ -31,7 +31,7 @@ public ResponseBody getYanoljaPay(@PathVariable Long mem return ResponseBody.ok(yanoljaPayService.getYanoljaPay(memberId)); } - @PostMapping("/payPassword/{memberId}") + @PostMapping("/pay-password/{memberId}") public ResponseBody> setPayPassword( @PathVariable("memberId") Long memberId, @RequestBody @Valid PayPasswordRequest payPasswordRequest From 9b544fbd39f3e1566fb0f44426e08ae8dd51fce7 Mon Sep 17 00:00:00 2001 From: deltawing71911 Date: Wed, 17 Jan 2024 22:22:51 +0900 Subject: [PATCH 4/5] =?UTF-8?q?refactor:=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EB=AA=85=20=EC=88=98=EC=A0=95,=20=EC=84=9C=EB=B9=84=EC=8A=A4?= =?UTF-8?q?=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit resolved #86 --- .../payment/controller/YanoljaPayController.java | 16 +++++----------- ...dRequest.java => PayPasswordSaveRequest.java} | 2 +- .../domain/payment/entity/YanoljaPay.java | 4 ++++ .../payment/service/YanoljaPayService.java | 13 +++++++------ 4 files changed, 17 insertions(+), 18 deletions(-) rename src/main/java/kr/co/fastcampus/yanabada/domain/payment/dto/request/{PayPasswordRequest.java => PayPasswordSaveRequest.java} (93%) diff --git a/src/main/java/kr/co/fastcampus/yanabada/domain/payment/controller/YanoljaPayController.java b/src/main/java/kr/co/fastcampus/yanabada/domain/payment/controller/YanoljaPayController.java index ad2f415c..736f881e 100644 --- a/src/main/java/kr/co/fastcampus/yanabada/domain/payment/controller/YanoljaPayController.java +++ b/src/main/java/kr/co/fastcampus/yanabada/domain/payment/controller/YanoljaPayController.java @@ -1,20 +1,14 @@ package kr.co.fastcampus.yanabada.domain.payment.controller; import jakarta.validation.Valid; -import kr.co.fastcampus.yanabada.common.exception.MemberNotFoundException; -import kr.co.fastcampus.yanabada.common.exception.PasswordConfirmationException; -import kr.co.fastcampus.yanabada.common.exception.YanoljaPayNotFoundException; import kr.co.fastcampus.yanabada.common.response.ResponseBody; -import kr.co.fastcampus.yanabada.domain.payment.dto.request.PayPasswordRequest; +import kr.co.fastcampus.yanabada.domain.payment.dto.request.PayPasswordSaveRequest; import kr.co.fastcampus.yanabada.domain.payment.dto.response.YanoljaPayHomeResponse; import kr.co.fastcampus.yanabada.domain.payment.service.YanoljaPayService; import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestAttribute; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -32,12 +26,12 @@ public ResponseBody getYanoljaPay(@PathVariable Long mem } @PostMapping("/pay-password/{memberId}") - public ResponseBody> setPayPassword( + public ResponseBody setPayPassword( @PathVariable("memberId") Long memberId, - @RequestBody @Valid PayPasswordRequest payPasswordRequest + @RequestBody @Valid PayPasswordSaveRequest payPasswordSaveRequest ) { - yanoljaPayService.setPayPassword(memberId, payPasswordRequest); - return ResponseBody.ok(ResponseEntity.ok().build()); + yanoljaPayService.setPayPassword(memberId, payPasswordSaveRequest); + return ResponseBody.ok(); } } diff --git a/src/main/java/kr/co/fastcampus/yanabada/domain/payment/dto/request/PayPasswordRequest.java b/src/main/java/kr/co/fastcampus/yanabada/domain/payment/dto/request/PayPasswordSaveRequest.java similarity index 93% rename from src/main/java/kr/co/fastcampus/yanabada/domain/payment/dto/request/PayPasswordRequest.java rename to src/main/java/kr/co/fastcampus/yanabada/domain/payment/dto/request/PayPasswordSaveRequest.java index 6f32d3f3..8854dbef 100644 --- a/src/main/java/kr/co/fastcampus/yanabada/domain/payment/dto/request/PayPasswordRequest.java +++ b/src/main/java/kr/co/fastcampus/yanabada/domain/payment/dto/request/PayPasswordSaveRequest.java @@ -5,7 +5,7 @@ import lombok.Builder; @Builder -public record PayPasswordRequest( +public record PayPasswordSaveRequest( @NotBlank(message = "패스워드는 공백일 수 없습니다.") @Pattern(regexp = "\\d{6}", message = "패스워드는 6글자이어야 합니다.") String password, diff --git a/src/main/java/kr/co/fastcampus/yanabada/domain/payment/entity/YanoljaPay.java b/src/main/java/kr/co/fastcampus/yanabada/domain/payment/entity/YanoljaPay.java index a8a1ca00..11444e64 100644 --- a/src/main/java/kr/co/fastcampus/yanabada/domain/payment/entity/YanoljaPay.java +++ b/src/main/java/kr/co/fastcampus/yanabada/domain/payment/entity/YanoljaPay.java @@ -93,4 +93,8 @@ public static YanoljaPay create( balance ); } + + public void savePassword(String password) { + this.simplePassword = password; + } } \ No newline at end of file diff --git a/src/main/java/kr/co/fastcampus/yanabada/domain/payment/service/YanoljaPayService.java b/src/main/java/kr/co/fastcampus/yanabada/domain/payment/service/YanoljaPayService.java index 057ef2c7..70c77955 100644 --- a/src/main/java/kr/co/fastcampus/yanabada/domain/payment/service/YanoljaPayService.java +++ b/src/main/java/kr/co/fastcampus/yanabada/domain/payment/service/YanoljaPayService.java @@ -5,7 +5,7 @@ import kr.co.fastcampus.yanabada.common.exception.YanoljaPayNotFoundException; import kr.co.fastcampus.yanabada.domain.member.entity.Member; import kr.co.fastcampus.yanabada.domain.member.repository.MemberRepository; -import kr.co.fastcampus.yanabada.domain.payment.dto.request.PayPasswordRequest; +import kr.co.fastcampus.yanabada.domain.payment.dto.request.PayPasswordSaveRequest; import kr.co.fastcampus.yanabada.domain.payment.dto.response.YanoljaPayHomeResponse; import kr.co.fastcampus.yanabada.domain.payment.entity.YanoljaPay; import kr.co.fastcampus.yanabada.domain.payment.repository.YanoljaPayRepository; @@ -35,14 +35,15 @@ private YanoljaPayHomeResponse getYanoljaPay(Member member) { } @Transactional - public void setPayPassword(Long memberId, PayPasswordRequest payPasswordRequest) { - if (!payPasswordRequest.isPasswordMatch()) { + public void setPayPassword(Long memberId, PayPasswordSaveRequest payPasswordSaveRequest) { + if (!payPasswordSaveRequest.isPasswordMatch()) { throw new PasswordConfirmationException(); } - Member member = memberRepository.findById(memberId) - .orElseThrow(MemberNotFoundException::new); + Member member = memberRepository.getMember(memberId); + YanoljaPay yanoljaPay = yanoljaPayRepository.findByMember(member) + .orElseThrow(YanoljaPayNotFoundException::new); - yanoljaPayRepository.updateSimplePassword(member, payPasswordRequest.password()); + yanoljaPay.savePassword(payPasswordSaveRequest.password()); } } \ No newline at end of file From ba69a84e54080a9ace589eeece190d10ae81a98f Mon Sep 17 00:00:00 2001 From: deltawing71911 Date: Wed, 17 Jan 2024 22:30:56 +0900 Subject: [PATCH 5/5] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit resolved #86 --- .../domain/payment/repository/YanoljaPayRepository.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/kr/co/fastcampus/yanabada/domain/payment/repository/YanoljaPayRepository.java b/src/main/java/kr/co/fastcampus/yanabada/domain/payment/repository/YanoljaPayRepository.java index 0ef239f0..da8a8685 100644 --- a/src/main/java/kr/co/fastcampus/yanabada/domain/payment/repository/YanoljaPayRepository.java +++ b/src/main/java/kr/co/fastcampus/yanabada/domain/payment/repository/YanoljaPayRepository.java @@ -13,8 +13,5 @@ public interface YanoljaPayRepository extends JpaRepository { Optional findByMember(Member member); - @Modifying - @Query("UPDATE YanoljaPay y SET y.simplePassword = :password WHERE y.member = :member") - void updateSimplePassword(@Param("member") Member member, @Param("password") String password); }