Skip to content

Commit 8ee5cbd

Browse files
committed
Feat: 쿠폰 관련 서비스 메서드 추가
1 parent 6ef8c15 commit 8ee5cbd

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

src/main/java/com/threestar/trainus/domain/coupon/user/repository/UserCouponRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.threestar.trainus.domain.coupon.user.repository;
22

33
import java.util.List;
4+
import java.util.Optional;
45

56
import org.springframework.data.jpa.repository.JpaRepository;
67
import org.springframework.data.jpa.repository.Query;
@@ -12,6 +13,8 @@
1213
public interface UserCouponRepository extends JpaRepository<UserCoupon, Long> {
1314
boolean existsByUserIdAndCouponId(Long userId, Long couponId);
1415

16+
Optional<UserCoupon> findByUserIdAndCouponId(Long userId, Long couponId);
17+
1518
@Query("SELECT uc FROM UserCoupon uc JOIN FETCH uc.coupon WHERE uc.user.id = :userId")
1619
List<UserCoupon> findAllByUserIdWithCoupon(@Param("userId") Long userId);
1720

src/main/java/com/threestar/trainus/domain/coupon/user/service/CouponService.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,35 @@ public CouponPageResponseDto getCoupons(Long userId) {
9494
.coupons(dtoList)
9595
.build();
9696
}
97+
98+
@Transactional
99+
public UserCoupon getValidUserCoupon(Long userCouponId, Long userId) {
100+
return userCouponRepository.findByUserIdAndCouponId(userId, userCouponId)
101+
.filter(c -> c.getStatus() == CouponStatus.ACTIVE)
102+
.orElseThrow(() -> new BusinessException(ErrorCode.COUPON_NOT_FOUND));
103+
}
104+
105+
public int calculateDiscountedPrice(int originalPrice, UserCoupon coupon) {
106+
String discountPrice = coupon.getCoupon().getDiscountPrice();
107+
if (discountPrice.contains("%")) {
108+
int discountPercentage = Integer.parseInt(discountPrice.substring(0, discountPrice.indexOf("%")));
109+
return originalPrice * discountPercentage / 100;
110+
} else {
111+
return Integer.parseInt(discountPrice.replace("원", ""));
112+
}
113+
}
114+
115+
public void useCoupon(UserCoupon coupon) {
116+
if (coupon.getStatus() == CouponStatus.ACTIVE) {
117+
coupon.use();
118+
userCouponRepository.save(coupon);
119+
}
120+
}
121+
122+
public void restoreCoupon(UserCoupon coupon) {
123+
if (coupon.getStatus() == CouponStatus.INACTIVE) {
124+
coupon.restore();
125+
userCouponRepository.save(coupon);
126+
}
127+
}
97128
}

0 commit comments

Comments
 (0)