Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

야놀자 페이 패스워드 설정 API 구현 #87

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
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());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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("이메일 전송에 실패하였습니다."),

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
package kr.co.fastcampus.yanabada.domain.payment.controller;

import jakarta.validation.Valid;
import kr.co.fastcampus.yanabada.common.response.ResponseBody;
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.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

Expand All @@ -20,5 +24,14 @@ public class YanoljaPayController {
public ResponseBody<YanoljaPayHomeResponse> getYanoljaPay(@PathVariable Long memberId) {
return ResponseBody.ok(yanoljaPayService.getYanoljaPay(memberId));
}

@PostMapping("/pay-password/{memberId}")
public ResponseBody<Void> setPayPassword(
@PathVariable("memberId") Long memberId,
@RequestBody @Valid PayPasswordSaveRequest payPasswordSaveRequest
) {
yanoljaPayService.setPayPassword(memberId, payPasswordSaveRequest);
return ResponseBody.ok();
}
}

Original file line number Diff line number Diff line change
@@ -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 PayPasswordSaveRequest(
@NotBlank(message = "패스워드는 공백일 수 없습니다.")
@Pattern(regexp = "\\d{6}", message = "패스워드는 6글자이어야 합니다.")
String password,
@NotBlank(message = "확인용 패스워드도 공백일 수 없습니다.")
String confirmPassword
) {

public boolean isPasswordMatch() {
return this.password.equals(this.confirmPassword);
}
Comment on lines +11 to +18
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

패스워드 == 확인용 패스워드 검증을 프론트에서 하고, 실제 서버에서는 패스워드 하나만 받을 수 있지 않나요?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이게 지금 페이 은행 등록시에 비번, 확인용 비번인가요?
만약 맞다면 저도 성수님 의견에 동감합니다

}
Original file line number Diff line number Diff line change
Expand Up @@ -93,4 +93,8 @@ public static YanoljaPay create(
balance
);
}

public void savePassword(String password) {
this.simplePassword = password;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
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<YanoljaPay, Long> {

Optional<YanoljaPay> findByMember(Member member);

}

Original file line number Diff line number Diff line change
@@ -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.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;
Expand Down Expand Up @@ -30,4 +33,17 @@ private YanoljaPayHomeResponse getYanoljaPay(Member member) {

return YanoljaPayHomeResponse.from(yanoljaPay);
}

@Transactional
public void setPayPassword(Long memberId, PayPasswordSaveRequest payPasswordSaveRequest) {
if (!payPasswordSaveRequest.isPasswordMatch()) {
throw new PasswordConfirmationException();
}

Member member = memberRepository.getMember(memberId);
YanoljaPay yanoljaPay = yanoljaPayRepository.findByMember(member)
.orElseThrow(YanoljaPayNotFoundException::new);

yanoljaPay.savePassword(payPasswordSaveRequest.password());
}
}
Loading