Skip to content

Commit

Permalink
Merge pull request #198 from marinesnow34/sync
Browse files Browse the repository at this point in the history
Fix: 쿠폰 발급 synchronized 삭제
  • Loading branch information
marinesnow34 authored Mar 12, 2024
2 parents 49e3dd3 + 0332921 commit 837d5e6
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@
import org.springframework.data.jpa.repository.Lock;

import com.readyvery.readyverydemo.domain.Coupon;
import com.readyvery.readyverydemo.domain.CouponDetail;
import com.readyvery.readyverydemo.domain.UserInfo;

import jakarta.persistence.LockModeType;

public interface CouponRepository extends JpaRepository<Coupon, Long> {
@Lock(LockModeType.OPTIMISTIC)
Optional<Coupon> findById(Long id);

Long countByCouponDetailIdAndUserInfoId(Long couponDetailId, Long userInfoId);
Optional<Coupon> findByUserInfoAndCouponDetail(UserInfo userInfo, CouponDetail couponDetail);
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.readyvery.readyverydemo.src.coupon.dto.CouponMapper;
import com.readyvery.readyverydemo.src.coupon.dto.CouponsRes;

import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;

@Service
Expand All @@ -36,7 +37,8 @@ public CouponsRes getCoupon(CustomUserDetails userDetails) {
}

@Override
public synchronized CouponIssueRes issueCoupon(CustomUserDetails userDetails, CouponIssueReq couponIssueReq) {
@Transactional
public CouponIssueRes issueCoupon(CustomUserDetails userDetails, CouponIssueReq couponIssueReq) {
CouponDetail couponDetail = getCouponDetail(couponIssueReq);
verifyCouponDetail(couponDetail, couponIssueReq);

Expand All @@ -52,7 +54,9 @@ public synchronized CouponIssueRes issueCoupon(CustomUserDetails userDetails, Co
}

private Long getIssuedCouponCount(UserInfo userInfo, CouponDetail couponDetail) {
return couponRepository.countByCouponDetailIdAndUserInfoId(couponDetail.getId(), userInfo.getId());
Coupon coupon = couponRepository.findByUserInfoAndCouponDetail(userInfo, couponDetail)
.orElseThrow(() -> new BusinessLogicException(ExceptionCode.COUPON_NOT_FOUND));
return coupon.getIssueCount() - coupon.getUseCount();
}

private void verifyCouponDetail(CouponDetail couponDetail, CouponIssueReq couponIssueReq) {
Expand Down

0 comments on commit 837d5e6

Please sign in to comment.