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] 경매는 진행 중 상태가 아니면 사용자의 요청을 처리할 수 없다 #63

Closed
Tracked by #31
chhs2131 opened this issue Aug 13, 2024 · 0 comments · Fixed by #85
Closed
Tracked by #31
Assignees
Labels
FEATURE 새로운 기능 또는 변경

Comments

@chhs2131
Copy link
Member

chhs2131 commented Aug 13, 2024

🤔 사전작업

  • 없음

✨ 현재 진행하려는 작업

  • Core
    • 입찰하려는 경매의 상태를 확인한다. (Auction)
      • 경매에게 현재 상태를 물어본다.
    • 경매 상태가 진행 중이 아닌 경우 예외를 발생시킨다. (Service)
  • Refactor
    • 경매상태 Enum에게 현 상태를 내부적으로 질문한다. (AuctionStatus)
    • 파라미터로 주어지는 특정 시점을 기준으로 어떤 상태였는지를 반환한다.
      • 외부에서 Auction의 상태를 정확하게 바꿔놓을 것으로 예상하고 단순히 getter를 통해 확인한다.
  • Exception
    • Auction.getStatusAt 호출 시, 전달되는 requestTime 파라미터가 Null인 경우 -> G001 예외
    • 진행 중이지 않은 경매에 입찰하려는 경우 -> A016 예외
  • Test
    • Auction.getStatusAt 파라미터에 따른 상태값 확인

🙋🏻 More

  • 코딩은 즐거워요!! 👻
  • 경매 입찰시에 기준 시간을 Payment측에서도 관리를 할 것 같은데 (내역 생성을 위해), AuctionService 내부적으로도 시간을 만들어 활용하고 있음.
  • 이를 공통으로 활용해야할지, 또는 반환으로 이러한 시간을 줘야할지?
    public void submitBid(long auctionId, long price, long quantity) {
        ZonedDateTime now = ZonedDateTime.now();  // 거래 기준 시간

        // 검증
        Auction auction = auctionRepository.findById(auctionId)
                .orElseThrow(() -> new NotFoundException("경매(Auction)를 찾을 수 없습니다. AuctionId: " + auctionId,
                        ErrorCode.A011));

        if (!auction.canPurchase(quantity)) {
            throw new BadRequestException(
                    "해당 수량만큼 구매할 수 없습니다. 재고: " + auction.getStock() + ", "
                            + "요청: " + quantity + ", 인당구매제한: " + auction.getMaximumPurchaseLimitCount(),
                    ErrorCode.A014);
        }

        if (!auction.getStatusAt(now).isRunning()) {
            throw new BadRequestException(
                    "진행 중인 경매에만 입찰할 수 있습니다. 현재상태: " + auction.getStatusAt(now),
                    ErrorCode.A016);
        }

        // TODO 구매(입찰) 로직
    }
  • changeOption에서는 외부에서 전달받은 requestTime을 사용하여 경매 상태를 확인하지만, submitBid에서는 내부적으로 생성한 현재 시간을 기준으로 경매상태를 확인한다. 일관되지 않은 것 같은 느낌이 난다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
FEATURE 새로운 기능 또는 변경
Projects
None yet
1 participant