«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

코더

쿠폰 선착순 기능에 대한 고민 본문

카테고리 없음

쿠폰 선착순 기능에 대한 고민

자바스티안 2025. 3. 10. 11:48

-배경-

쿠폰기능에서 선착순쿠폰이 끝나면 다른 유저가 조회를 못하도록 기능을 구현했다.

 

-문제점-
그런데 이렇게 하려다 보니 couponUsed = false가 true가 되면 조회가 안되도록 구현하였는데 이 couponUsed가 UserCoupon객체에 존재하게 되어 

public List<CouponResponse> findRestaurantCoupons(Long restaurantId) {
        List<Coupon> coupons = couponRepository.findByRestaurantId(restaurantId);

CouponResponse의 응답값을 받는 Coupon으로는 couponUsed를 사용 할 수 없게 되었다.

그래서 생각한것이 하나의 usedCoupon2(?) 이런식으로 하나 더 만들어서 Coupon 엔티티에 넣어주자는 생각이었는데 

뭔가 이러한 구조가 마음에 들지 않았다(똑같은 기능이 userCoupon에도 있고 coupon에도 있는듯한 느낌?)

그래서 생각해낸 방안이


이런 식으로 코드를 구성하는것이였다. 굳이 엔티티에 하나 더 추가해주는 방식이 아닌 
 couponUsed값이 false일때 downloadedCount < maxCount;를 비교해 이 조건을 만족할때만 다른 유저들도 이 선착순 쿠폰을 조회가능하게만 만들어 주었다.

위에 null값일때 0으로 값을 변경한것은

 

{ "httpStatus": "INTERNAL_SERVER_ERROR",

"errorMessage": "Cannot invoke \"java.lang.Integer.intValue()\"

because the return value of \"com.sparta.oishitable.domain.owner.coupon.entity.Coupon.getFirstComeCouponMaxCount()\" is null"

}

 

이런 오류가 발생해 원인이 firstComeCouponMaxCount가 null인 경우가 있어서 null일경우 0으로 반환해주는 코드를 추가해주었다.