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

[FEATURE] : 토스페이먼츠 결제 API를 구현합니다. #62

Open
wants to merge 22 commits into
base: develop
Choose a base branch
from

Conversation

na0th
Copy link
Contributor

@na0th na0th commented Oct 16, 2024


TODO

  • 세션 값 임시 저장되는지 검증

  • 토스페이먼츠 결제 요청 성공, 실패

  • PaymentResponse DTO에 토스페이먼츠 Response 저장

  • UserId 통해서 wallet를 찾기 (paidUser.getWallet)

  • wallet < - > payment 연관 관계 편의 메서드로 객체 참조 맺기

  • payment 저장 -> cascade.ALL로 지갑도 자동 저장

  • 결제 정보 저장 성공 시, 지갑 충전 로직

  • 결제 정보 저장 실패 시, 토스페이먼츠로 결제 취소 요청

  • 토스 결제 실패 시, 클라이언트로 실패 객체 리턴

  • 결제 실패 시, 트랜잭션에 의해서 충전 금액, 결제 내역 롤백

  • 결제 시나리오 검증

  • 결제 api 리팩토링

  • 결제 api 테스트 코드 작성


🆕 기능 추가 / 🔧 버그 수정

  • 기능 추가: 기능의 간략한 설명을 작성합니다.
    토스 페이먼츠 결제 API를 구현합니다.

📋 변경 사항

🔍 테스트 사항

📄 관련 문서

  • 변경 사항과 관련된 문서나 링크가 있다면 여기에 추가해주세요.

📝 추가 사항

  • PR과 관련된 다른 중요한 정보나 주의 사항을 기입합니다.

- 변경 내용 1 : PrePersist 함수 삭제
- 변경 내용 2 : viewCount null 체크 삭제
- 변경 내용 3 : viewCount Long -> long

이유 : Long을 쓰면 null을 고려해야 하지만, long을 쓰면 null을 고려할 필요가 없어짐
-변경 사항 1 : 페이징 카운트 처리에서 생겼던 전체 size를 잘못 계산하던 에러 수정
- 추가한 내용 :
1. Payment 엔티티 구성
2. payment 관련 enum Type 구성
- payStatus, payType
3. payment DTO 구성
4. Payment 관련 api 메세지 구성
- 추가한 내용
:
1. controller, service, repository 레이어 구성
2. orderId, amount를 세션에 임시 저장하는 엔드포인트 구성
@CreatorDodo
Copy link

👏👏👏

- 추가한 내용 :
1. wallet 엔티티 구성
2. wallet 컨트롤러, 서비스, 레포지터리 레이어 구성
3. user 엔티티와 wallet 엔티티간 양방향 관계 설정 및 연관관계 편의 메서드 구현
-> 연관 관계 주인 쪽 user에서 처리
4. wallet 엔티티와 payment 엔티티간 양방향 관계 설정 및 연관관계 편의 메서드 구현
-> 연관 관계 주인 쪽 payment에서 처리

미완 :
1. user 엔티티 create 시에 wallet도 생성되게 처리 해야 한다.
2. wallet 의 식별자를 uuid로 해야 할지 고민해야 함.
-추가된 내용 :
1. 세션에 orderId, amount 값을 임시 저장한 것이 제대로 저장되었는지 테스트
이유 : 결제 최종 승인 요청 전에 값이 변조되지 않았는지 검증하기 위함

미흡 :
결제 요청 받았을 때, 세션에 값이 저장되지 않았을 경우에 대한 예외 처리 미완
테스트 코드에 대한 부족함이 느껴져 찜찜함이 있다.
@na0th na0th changed the title Feature : 토스페이먼츠 결제 API를 구현합니다. [FEATURE] : 토스페이먼츠 결제 API를 구현합니다. Oct 16, 2024
.
.
변경한 내용 :
1. 트랜잭션 단위로 User 생성과 Wallet 생성을 묶어서 처리
2, 연관 관계 편의 메서드로 User와 Wallet 간 객체 참조 연결
3. User의 영속성이 Wallet으로 전파되도록
cascade.ALL 설정
추가한 내용 :
1. wallet 충전 메서드
2. wallet 생성 예외 메시지
이유 :
git이 paymentController -> PaymentController로 바꾼 것을 인식하지 못함
임시 이름에서 다시 변경
변경한 내용
1. Controller 로직 -> Service 레이어로 옮김
2. PayType, PayStatus 같은 Enum Type의 메서드명, 변수명을 변경
3. PaymentRequest, Response 토스 페이먼츠 변수명에 맞게 변경
3. paymentConfig url 변수명 변경

++
4. chargeMoney에서 save()까지 책임 옮김
추가한 내용 :
1. Payment 엔티티에 create 메서드 추가
2. Payment 관련 Api 메세지 추가
3. Payment 관련 예외 메세지 추가
4. Http Client를 Config에서 Bean 등록
변경한 내용 :
필요없는 인자를 커밋해서
빌드시 오류가 나던 것을 해결
변경한 내용 :
1. User.create 메서드를 createWithWallet 메서드로 변경하면서 Wallet 생성 부분까지 한 번에 User를 생성하면서 맡도록 했음
2. Service 레이어에서 Wallet 생성 책임을 User에 넘겼음
3. 그로인해 AuctionInitializer 코드 변경(지갑 생성 부분)
4. UserDetailsResponse walletId 필드 추가
변경한 내용 :
1. wallet을 User쪽에서 한 번에 생성하면서 테스트 코드를 조금 변경함
2. UserDetailsResponse에 walletId 필드를 추가해서 테스트코드의 생성자의 파라미터로 walletId 필드 추가해줌
변경 및 추가한 내용 :
1.  인터페이스로 HttpClient 같은 의존성에 간접 의존하도록 바꿈
-> 변경에 유연하도록
2. 토스페이로부터 온 응답을 HttpResponse에서 직접 만든 Response(Object)로 변환해서 처리
-> 테스트 시 객체 생성이 쉬워지도록
3. userId를 통해 Wallet 반환받는 메서드를 쿼리로 변경
-> user.getWallet() 에서 JPQL 쿼리로 변경

미완 :
테스트 추가 필요
추가한 내용 :
paymentKey 세션 임시 저장 확인 테스트
결제 상태에 따른 메서드 처리 확인 테스트
Wallet 조회, 충전 관련 테스트 추가 등등

미완 :
컨트롤러 테스트 추가 필
추가한 내용 :
1. 컨트롤러 테스트 추가
2. ExceptionHandler에 Invalid Session, PaymentDataMismatch 예외 추가 400번 반환
3. Service 테스트 삭제
-> 안 쓰이던 테스트
변경한 내용 :
토스 api 버전에 따라 response 형식이 달라서
맞추기 위함.
@JsonAlias를 통해 error object의 루트 레벨을 평탄화하여 code, message를 필드로 추가
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants