getCoupon과 동시성

두주·2024년 2월 18일
0

TIL

목록 보기
56/58
override fun getCoupon( request: GetCouponRequest) : GetCouponResponse {
        val userCheck = memberRepository.findByIdOrNull(/*userPrincipal.id*/ 2L)
            ?: throw IllegalArgumentException("Invalid Member")

        val couponCheck = couponRepository.findByCouponNumber(request.couponNumber)
            ?: throw IllegalArgumentException("Invalid Coupon")


        if(couponCheck.couponNumber == request.couponNumber && couponCheck.available) {

            couponCheck.available = false
            couponCheck.memberId = userCheck

            couponRepository.save(couponCheck)

            return GetCouponResponse(couponNumber = couponCheck.couponNumber)
        } else {
            throw IllegalArgumentException("이미 사용된 쿠폰이거나 쿠폰 번호가 유요하지 않습니다.")
        }
    }

coupon을 입력했을 때 request로 불러온 내용과 일치 여부를 확인한다.

만약, 쿠폰 번호가 같고, avilable이 true라서 사용이 가능할 경우
쿠폰 번호에 대해 사용 불가 처리와 함께 등록된 유저 정보를 쿠폰 데이터에 담는다.

개별 쿠폰이기 때문에 위와 같이 처리를 진행했다.

동시성에 대한 내용을 확인하기 위해서는 개별 쿠폰이 아닌 공통 쿠폰에,
선착순 등의 시스템을 도입해 보아야 할 것 같다.

profile
야옹.

0개의 댓글