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

구매자 페이먼트 충전 #15

Merged
merged 65 commits into from
Aug 14, 2024

Conversation

Hyeon-Uk
Copy link
Contributor

@Hyeon-Uk Hyeon-Uk commented Aug 11, 2024

💡 다음 이슈를 해결했어요.

Issue Link - #3


💡 이슈를 처리하면서 추가된 코드가 있어요.

PayAccount 도메인 엔티티

  • 계좌에 대한 도메인 엔티티입니다.
  • 입금과 출금을 진행합니다. 입/출금을 진행함과 동시에 사용 내역을 반환하도록 구현했습니다.
  • 입/출금에 대한 사전 validation을 진행합니다.
  • InsufficientBalanceException : 잔고가 부족할 때 발생하는 exception입니다.
  • InvalidTransactionAmountException : 음수, 혹은 0의 amount값이 들어왔을 때 발생하는 exception입니다.

PayAccountHistory 도메인 엔티티

  • 계좌의 입/출금 내역을 기록할 수 있는 로그성 엔티티입니다.
  • 타입은 AccountTransactionType 클래스에서 enum으로 관리합니다.
  • 생성 날짜 관리를 위해 JpaAuditing을 사용했습니다.

입출금 서비스 (PayAccountDepositService, PayAccountWithdrawService)

  • 입금과 출금을 각각 진행하는 Service입니다.
  • 입금과 출금을 진행함과 동시에 History를 기록할 수 있도록 로직을 추가했습니다.

PayAccountApiController

  • 포인트를 충전할 수 있는 Controller입니다.

PayAccountApiControllerAdvice

  • PayAccountApiController에서 발생할 수 있는 Exception에 대해 공통으로 처리할 수 있는 Advice입니다.

💡 이런 고민을 했어요.

  • 계좌의 잔고를 업데이트하는 부분에 x-lock을 걸어 동시성 문제를 일시적으로 해결했습니다.

💡 다음 자료를 참고하면 좋아요.

  • (없다면 이 문항을 지워주세요.)

✅ 셀프 체크리스트

  • 내 코드를 스스로 검토했습니다.
  • 필요한 테스트를 추가했습니다.
  • 모든 테스트를 통과합니다.
  • 브랜치 전략에 맞는 브랜치에 PR을 올리고 있습니다.
  • 커밋 메세지를 컨벤션에 맞추었습니다.
  • wiki를 수정했습니다.

- 잔고는 int형 이상을 가지고 있는 사람이 있을 수 있으므로 long타입.
- default값은 0
- 잔고의 값은 null이 될 수 없음.
- 출금을 진행할 때, 잔액 부족에 대한 exception 생성
- 입/출금을 진행하며 0원 이하로 들어오는 행위에 대한 exception 생성
- 기본 생성자로 생성 시 잔고는 0원으로 셋팅
- 0원 이하의 금액으로 입/출금 진행시 InvalidTransactionAmountException throw
- 출금은 자신의 잔고보다 더 많은 금액을 출금시 InsufficientBalanceException throw
- 아무런 문제가 없다면 입/출금 진행 뒤 잔고 업데이트
- 기본 생성자로 생성 시 잔고는 0원으로 셋팅
- 0원 이하의 금액으로 입/출금 진행시 InvalidTransactionAmountException throw
- 출금은 자신의 잔고보다 더 많은 금액을 출금시 InsufficientBalanceException throw
- 아무런 문제가 없다면 입/출금 진행 뒤 잔고 업데이트
- PayAccount 고유의 Id를 조회할 일이 많기 때문에 메서드 추가
@Hyeon-Uk Hyeon-Uk added the ✨ Feature 기능 개발 label Aug 11, 2024
@Hyeon-Uk Hyeon-Uk added this to the 프로토타입 만들기 milestone Aug 11, 2024
@Hyeon-Uk Hyeon-Uk self-assigned this Aug 11, 2024
- JpaRepository를 extends 하여 생성
- 계좌 잔고와 같은 민감한 데이터는 x-lock을 통해 lock을 걸고 업데이트해야하기 때문에 추가
ID로 찾지 못한 경우에 대한 예외입니다.
- 계좌에 입/출금을 진행하기 위해 공통적으로 사용되는 매개변수들입니다.
- 입/출금을 진행하기 위해서 해당 payAccountId와 얼마를 입/출금할지에 대한 amount 변수가 있습니다.
- 계좌를 찾은 뒤 요청받은 액수만큼 출금을 진행한 뒤 남은 잔고를 반환합니다.
- 계좌가 없으면 NotFoundAccountException을 throw 합니다.
- Account가 존재하는 경우에 대한 성공 처리 테스트코드 작성
- Account가 존재하지 않는 경우에 대한 롤백 처리 테스트코드 작성
- 동시에 여러 요청이 들어오더라도 일관적인 결과를 반환하는지에 대한 테스트코드 작성
- 계좌를 찾은 뒤 요청받은 액수만큼 입금을 진행한 뒤 남은 잔고를 반환합니다.
- 계좌가 없으면 NotFoundAccountException을 throw 합니다.
- Account가 존재하는 경우에 대한 성공 처리 테스트코드 작성
- Account가 존재하지 않는 경우에 대한 롤백 처리 테스트코드 작성
- 동시에 여러 요청이 들어오더라도 일관적인 결과를 반환하는지에 대한 테스트코드 작성
- withdraw 로 표기된것을 deposit으로 수정
- PayAccount를 외래키로 가지고 있음
 - 관계는 1:N
- 생성 시간을 JPA에서 관리할 수 있도록 AuditingEntityListener 추가
- 입금과 출금은 항상 기록을 남겨야하기 때문에 필요하다고 생각
- 입/출금 서비스는 항상 기록을 남겨야하기 때문에 추가
- API End-Point를 알맞게 조절해야할 필요가 있음
…Advice 구현

- 현재는 api format과 예외처리에 대한 논의가 진행되지 않은 상태라 논의 후 리팩토링
- 정상 충전되는 경우에 대한 테스트
- account Id가 null이 들어올 경우 400
- 존재하지 않는 Id가 들어온 경우 404
- amount가 음수 혹은 0이 들어온다면 400
@Hyeon-Uk Hyeon-Uk marked this pull request as ready for review August 11, 2024 13:19
Copy link
Member

@Dr-KoKo Dr-KoKo left a comment

Choose a reason for hiding this comment

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

사소한 리뷰 남겼습니다.

@Hyeon-Uk Hyeon-Uk marked this pull request as draft August 13, 2024 09:06
- withdraw와 deposit은 충전에 해당하지 않는다는 판단하에 제거
- API Response 형식을 회의 후 결정하여 포멧에 맞게 던져야함
- deposit과 withdraw가 사라지고, 충전에 대한 command라는것을 확실히 명시하기 위해 이름 변경
- 충전은 customer만 가능하기 때문에, customerId를 받도록 수정
- 테스트에서 setup시에 customer의 정보를 저장할 필요가 있어서 추가
- PayAccount에서 발생하는 예외에 대한 메세지와 상태값들로 저장
- ProblemDetails를 이용해서 response해주도록 수정
@Hyeon-Uk Hyeon-Uk marked this pull request as ready for review August 13, 2024 16:51
@Hyeon-Uk Hyeon-Uk linked an issue Aug 14, 2024 that may be closed by this pull request
@Hyeon-Uk
Copy link
Contributor Author

머지하겠습니다!

@Hyeon-Uk Hyeon-Uk merged commit 243607e into main Aug 14, 2024
1 check passed
@Hyeon-Uk Hyeon-Uk deleted the feature/3_Hyeon-Uk_구매자_페이먼트_충전 branch August 15, 2024 04:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ Feature 기능 개발
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[기능] ArgumentResolver 등록 [기능] 구매자 배민페이머니 충전
3 participants