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

물품 구매 로직 구현 #11

Open
wants to merge 27 commits into
base: roki/purchase
Choose a base branch
from

Conversation

KimGyeongLock
Copy link
Collaborator

구매 플로우

  1. 유저는 물건을 사기 위해 구매 상세 페이지로 들어간다 (구매 상세 요청) - /api/v1/products
    • 물품 상태: SELL
    • 사물함 상태: True
  2. 물건 상세 설명을 확인하고 구매 버튼을 클릭한다 (물건 구매 버튼 클릭) - /api/v1/product/purchase-page/{product_id}
    • 물품 상태: CHECK
    • 사물함 상태: True
  3. 구매자에게 판매자의 실명과 계좌번호 전달 ()
    • 물품 상태: CHECK
    • 사물함 상태: True
  4. 구매자는 입금 후 구매 완료 버튼 클릭() - /api/v1/product/purchase/{product_id}
    • 물품 상태: CHECK
    • 사물함 상태: True
  5. 판매자에게 사물함 아이디와 비밀번호 전달한다. (물품 별 사물함 아이디, 비밀번호 전달)
    • 물품 상태: CHECK
    • 사물함 상태: True
  6. 판매자는 물건을 사물함에 넣고 확인 버튼을 누른다. () - /api/v1/product/locker-in/{product_id}
    • 물품 상태: WAIT
    • 사물함 상태: False
  7. 구매자는 알림을 받고 물건 수령 완료 버튼 클릭() - /api/v1/product/take-out/{product_id}
    • 물품 상태: DONE
    • 사물함 상태: True

@KimGyeongLock KimGyeongLock changed the title Roki/purchase 물품 구매 로직 구현 Nov 2, 2024
@chanyoungit chanyoungit removed their assignment Nov 9, 2024
Copy link
Member

@alswp006 alswp006 left a comment

Choose a reason for hiding this comment

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

수고하셨습니다!!

/**
* 가장 낮은 번호의 빈 사물함을 할당하는 메소드
*/
public Locker assignLocker() {
Copy link
Member

Choose a reason for hiding this comment

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

이 부분은 동시성에 대한 고려를 해주지 않아도 될까요??

* 구매자가 물건 구매를 시작함 (Pessimistic Lock 적용)
*/
@Transactional
public boolean startPurchase(Long productId, HttpServletRequest request) {
Copy link
Member

Choose a reason for hiding this comment

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

혹시 이 곳에 비관적 락을 사용하신 이유가 있을까요??

@Column(nullable = false)
private LocalDateTime updatedAt;

@PrePersist
Copy link
Member

Choose a reason for hiding this comment

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

BaseEntity를 고려해보셔도 좋을 것 같습니다!

Locker assignedLocker = lockerService.assignLocker();
return ResponseEntity.ok(assignedLocker);
} catch (RuntimeException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
Copy link
Member

Choose a reason for hiding this comment

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

공통응답처리를 고려해보셔도 좋을 것 같습니다!

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.

3 participants