-
Notifications
You must be signed in to change notification settings - Fork 0
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
경매 입찰 기능 구현 #163
Merged
Merged
경매 입찰 기능 구현 #163
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- 최종 낙찰 금액에 해당하는 minBid -> finalBid로 직관적으로 수정
- 입찰 요청 시 방어 로직 추가 - 요청한 입찰가는 이전 입찰가보다 높아야함 - 경매를 올린 사용자는 입찰이 불가능 - 경매가 시작하기 전 또는 후에는 입찰이 불가능 - 여러 사용자가 동시에 입찰을 시도할 경우 낙관적 락 OPTIMISTIC 옵션을 적용 - READ level에서 lock을 적용하여 잘못된 값을 조회하지 않도록 적용 - 낙관적 락 적용으로 인해 Exception이 발생할 경우 Retry 적용 - BackOff를 적용하여 1초 delay를 시작으로 max 5초까지 delay를 적용 - 최대 3번 retry 적용
src/main/java/freshtrash/freshtrashbackend/FreshTrashBackendApplication.java
Show resolved
Hide resolved
src/main/java/freshtrash/freshtrashbackend/dto/request/AuctionRequest.java
Show resolved
Hide resolved
src/main/java/freshtrash/freshtrashbackend/dto/request/BiddingRequest.java
Show resolved
Hide resolved
src/main/java/freshtrash/freshtrashbackend/dto/response/AuctionResponse.java
Show resolved
Hide resolved
src/main/java/freshtrash/freshtrashbackend/exception/GlobalExceptionHandler.java
Show resolved
Hide resolved
src/main/java/freshtrash/freshtrashbackend/exception/constants/ErrorCode.java
Show resolved
Hide resolved
src/main/java/freshtrash/freshtrashbackend/repository/BiddingHistoryRepository.java
Show resolved
Hide resolved
- AuctionRequest의 finalBid -> minimumBid 수정 - AuctionApi의 requestBidding -> placeBidding 수정
- 입찰 시간에 대한 방어 로직 조건이 잘못되어 수정 - 방어 로직을 따로 메소드 분리
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🔍️ 이 PR을 통해 해결하려는 문제
사용자가 특정 경매에 대해 입찰 요청할 수 있는 기능을 구현합니다. 요청 시 다음과 같은 조건을 고려해야합니다.
경매 입찰이 정상적으로 반영되었을 경우 입찰 기록을 DB에 저장해야합니다.
✨ 이 PR에서 핵심적으로 변경된 사항
BiddingHistory
엔티티 및 레포지토리 추가Auction 엔티티에
@Version
을 적용한 version 속성을 추가하여 낙관적 락 적용경매 입찰 기능 구현
입찰 요청 시 방어 로직 추가
여러 사용자가 동시에 입찰을 시도할 경우 낙관적 락
OPTIMISTIC
옵션 적용ObjectOptimisticLockingFailureException
,CannotAcquireLockException
)이 발생할 경우 Retry를 적용했습니다.BackOff
를 적용하여 1초 delay를 시작으로 최대 5초까지 delay를 적용했습니다.Spring Retry
는Spring AMQP
에서 내부적으로 내부적으로 지원하기 때문에 따로 dependency를 추가하지 않았습니다.입찰 금액 업데이트 후 입찰 기록 저장
테스트 코드 작성
🔖 핵심 변경 사항 외에 추가적으로 변경된 부분
Auction의 최종 낙찰 금액에 해당하는 minBid -> finalBid로 직관적으로 수정했습니다.
BindException
을 처리하기위한ExceptionHandler
를 추가했습니다.테스트에서도 lombok을 사용하기위해 dependency를 추가했습니다.
📌 PR 진행 시 이러한 점들을 참고해 주세요
Issue Tags