- 사용자 식별자 및 충전 금액을 요청 받아 잔액을 충전한다.
- 충전 요청 대상 사용자는 존재하는 사용자여야 한다.
- 충전 금액(
chargeAmount)은 최소 10,000원 이상이어야 한다. - 충전 후 보유 금액(
amount + chargeAmount)이 2,000,000원을 초과할 수 없다. - 특정한 사용자에 대해 동시에 여러 번 잔액 충전 요청이 들어오면 실패를 한다.
- [동시성 이슈] 특정 사용자에 대해 동시에 여러 건의 충전 요청이 들어오더라도 동시성 이슈 없이 정확하게 처리되어야 한다.
- 사용자 식별자를 통해 해당 사용자의 잔액을 조회한다.
- 잔액 조회 대상 사용자는 존재하는 사용자여야 한다.
- 조회 결과에는 사용자 식별자, 잔액이 포함되어야 한다.
- 발급 대상은 존재하는 유효한 사용자여야 한다.
- 쿠폰은 발급 기간 내에서만 발급할 수 있다.
- 동일 사용자는 동일 쿠폰을 중복 발급 받을 수 없다.
- 쿠폰은 정의된 발급 수량 한도 내에서만 발급된다.
- 여러 사용자가 동시에 발급을 요청하는 경우, 선착순으로 처리 되어야 한다.
- [동시성 이슈] 동시에 여러 건의 발급 요청이 들어오더라도 동시성 이슈 없이 정확하게 처리되어야 한다.
- 조회 사용자는 존재하는 사용자여야 한다.
- 조회 결과에는 쿠폰ID, 만료일, 발급이 포함되어야 한다.
- 유효한 쿠폰(
UserCouponStatus == Issued)만 조회된다. (유효하지 않은 경우는 사용 완료, 기간 만료 등. )
- 조회 결과에는 ID, 상품 이름, 가격, 잔여수량이 포함되어야 한다.
- 조회 결과에는 ID, 상품 이름, 가격, 잔여수량이 포함되어야 한다.
- 동시성 처리를 위해 조회 시점의 상품별 잔여수량이 정확하지 않아도 된다.
- 최근 3일간 가장 많이 팔린 상위 5개 상품 정보를 조회해야 한다.
- 조회 결과는 판매량 기준 내림차순(많이 팔린 순)으로 정렬한다.
- 주문 상품은 존재하는 상품 ID 여야 한다.
- 상품 재고가 충분할 경우에만 차감한다.
- [동시성 이슈] 동일한 재고에 대해 여러 건의 요청이 동시에 들어오더라도 동시성 이슈 없이 정확하게 처리되어야 한다.
- 결제는 사전에 충전된 포인트 잔액으로 수행한다.
- 결제 성공 시, 사용자의 잔액을 차감한다.
- 결제 실패 시, 재고 차감 내역은 롤백되어야 한다.
- 결제 성공 시, 주문 정보를 실시간으로 데이터 플랫폼에 전송해야 한다.
- [동시성 이슈] 동일한 포인트에 대해 여러 건의 결제 요청이 동시에 발생하더라도 동시성 이슈 없이 정확하게 처리되어야 한다.
- 쿠폰은 사용 가능 상태(CouponStatus == ISSUED)일 때만 사용할 수 있다.
- 주문 시 쿠폰을 사용하면, 쿠폰 상태를 변경하고 사용 이력을 기록한다.
- 쿠폰 사용 실패 시, 포인트 차감 및 재고 차감은 롤백되어야 한다.
- 하나의 주문에 대해 여러 개의 쿠폰을 사용할 수 있다.
- [동시성 이슈] 동일한 쿠폰에 대해 여러 건의 사용 요청이 동시에 발생하더라도 동시성 이슈 없이 정확하게 처리되어야 한다.