From 54c0322398c0580c0842f4609a60c61cef8cfe8b Mon Sep 17 00:00:00 2001 From: Klaus Date: Mon, 9 Jun 2025 15:16:11 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=BF=A0=ED=8F=B0=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=20-=20=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EC=BF=A0=ED=8F=B0?= =?UTF-8?q?=EC=9D=B4=EB=A9=B4=20=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EC=B6=A9?= =?UTF-8?q?=EC=A0=84=20=EB=90=98=EB=8F=84=EB=A1=9D=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/can/charge/ChargeService.kt | 64 +++++++++++++++---- .../vividnext/sodalive/point/PointGrantLog.kt | 3 +- 2 files changed, 54 insertions(+), 13 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeService.kt index 4b8486e..66ea314 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeService.kt @@ -5,6 +5,7 @@ import kr.co.bootpay.Bootpay import kr.co.vividnext.sodalive.can.CanRepository import kr.co.vividnext.sodalive.can.charge.event.ChargeSpringEvent import kr.co.vividnext.sodalive.can.coupon.CanCouponNumberRepository +import kr.co.vividnext.sodalive.can.coupon.CouponType import kr.co.vividnext.sodalive.can.payment.Payment import kr.co.vividnext.sodalive.can.payment.PaymentGateway import kr.co.vividnext.sodalive.can.payment.PaymentStatus @@ -12,6 +13,11 @@ import kr.co.vividnext.sodalive.common.SodaException import kr.co.vividnext.sodalive.google.GooglePlayService import kr.co.vividnext.sodalive.member.Member import kr.co.vividnext.sodalive.member.MemberRepository +import kr.co.vividnext.sodalive.point.MemberPoint +import kr.co.vividnext.sodalive.point.MemberPointRepository +import kr.co.vividnext.sodalive.point.PointGrantLog +import kr.co.vividnext.sodalive.point.PointGrantLogRepository +import kr.co.vividnext.sodalive.useraction.ActionType import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.OkHttpClient import okhttp3.Request @@ -27,6 +33,7 @@ import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional import java.math.BigDecimal import java.math.RoundingMode +import java.time.LocalDateTime @Service @Transactional(readOnly = true) @@ -36,6 +43,9 @@ class ChargeService( private val memberRepository: MemberRepository, private val couponNumberRepository: CanCouponNumberRepository, + private val grantLogRepository: PointGrantLogRepository, + private val memberPointRepository: MemberPointRepository, + private val objectMapper: ObjectMapper, private val okHttpClient: OkHttpClient, private val applicationEventPublisher: ApplicationEventPublisher, @@ -64,23 +74,53 @@ class ChargeService( if (canCouponNumber.member != null) { throw SodaException("이미 사용한 쿠폰번호 입니다.") } - canCouponNumber.member = member val coupon = canCouponNumber.canCoupon!! - val couponCharge = Charge(0, coupon.can, status = ChargeStatus.COUPON) - couponCharge.title = "${coupon.can} 캔" - couponCharge.member = member - val payment = Payment( - status = PaymentStatus.COMPLETE, - paymentGateway = PaymentGateway.PG - ) - payment.method = coupon.couponName - couponCharge.payment = payment - chargeRepository.save(couponCharge) + when (coupon.couponType) { + CouponType.CAN -> { + val couponCharge = Charge(0, coupon.can, status = ChargeStatus.COUPON) + couponCharge.title = "${coupon.can} 캔" + couponCharge.member = member - member.charge(0, coupon.can, "pg") + val payment = Payment( + status = PaymentStatus.COMPLETE, + paymentGateway = PaymentGateway.PG + ) + payment.method = coupon.couponName + couponCharge.payment = payment + chargeRepository.save(couponCharge) + + member.charge(0, coupon.can, "pg") + } + + CouponType.POINT -> { + val memberId = member.id!! + val point = coupon.can + val actionType = ActionType.COUPON + + grantLogRepository.save( + PointGrantLog( + memberId = memberId, + point = point, + actionType = actionType, + policyId = null, + orderId = null, + couponName = coupon.couponName + ) + ) + + memberPointRepository.save( + MemberPoint( + memberId = memberId, + point = point, + actionType = actionType, + expiresAt = LocalDateTime.now().plusDays(3) + ) + ) + } + } } @Transactional diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/point/PointGrantLog.kt b/src/main/kotlin/kr/co/vividnext/sodalive/point/PointGrantLog.kt index 83666c6..e2c3ab5 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/point/PointGrantLog.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/point/PointGrantLog.kt @@ -13,5 +13,6 @@ data class PointGrantLog( @Enumerated(EnumType.STRING) val actionType: ActionType, val policyId: Long?, - val orderId: Long? + val orderId: Long?, + val couponName: String? = null ) : BaseEntity()