feat(charge): 첫 충전 보너스 신규 생성을 중단한다

This commit is contained in:
2026-10-19 18:33:34 +09:00
parent 2aef413adf
commit 45b97088ca
6 changed files with 777 additions and 34 deletions
@@ -13,7 +13,6 @@ import kr.co.vividnext.sodalive.fcm.FcmEventType
import kr.co.vividnext.sodalive.fcm.notification.PushNotificationCategory
import kr.co.vividnext.sodalive.member.Member
import kr.co.vividnext.sodalive.member.MemberRepository
import kr.co.vividnext.sodalive.member.auth.AuthRepository
import org.springframework.context.ApplicationEventPublisher
import org.springframework.dao.DataIntegrityViolationException
import org.springframework.stereotype.Service
@@ -24,7 +23,6 @@ import org.springframework.transaction.support.TransactionSynchronization
import org.springframework.transaction.support.TransactionSynchronizationManager
import org.springframework.transaction.support.TransactionTemplate
import java.time.LocalDateTime
import kotlin.math.ceil
import kotlin.math.round
@Service
@@ -34,7 +32,6 @@ class ChargeEventJobService(
private val chargeRepository: ChargeRepository,
private val memberRepository: MemberRepository,
private val chargeEventRepository: ChargeEventRepository? = null,
private val authRepository: AuthRepository? = null,
private val applicationEventPublisher: ApplicationEventPublisher? = null,
transactionManager: PlatformTransactionManager? = null
) {
@@ -121,36 +118,7 @@ class ChargeEventJobService(
private fun buildSnapshot(charge: Charge, member: Member): ChargeEventJob? {
val paymentGateway = charge.payment?.paymentGateway
?: throw SodaException(messageKey = "can.charge.event.not_applied_contact")
return if (member.auth != null) {
val authRepository = authRepository ?: return null
val authDate = authRepository.getOldestCreatedAtByDi(member.auth!!.di)
val chargeCount = authRepository.getMemberIdsByDi(member.auth!!.di)
.sumOf { id -> chargeRepository.getChargeCountAfterDate(memberId = id, authDate) }
if (chargeCount > 1) {
buildActiveEventSnapshot(charge, member, paymentGateway)
} else {
buildFirstChargeSnapshot(charge, member, paymentGateway)
}
} else {
buildActiveEventSnapshot(charge, member, paymentGateway)
}
}
private fun buildFirstChargeSnapshot(charge: Charge, member: Member, paymentGateway: PaymentGateway): ChargeEventJob {
val additionalCan = ceil(charge.chargeCan * 0.15).toInt()
return ChargeEventJob(
sourceChargeId = charge.id!!,
memberId = member.id!!,
chargeEventId = null,
jobType = ChargeEventJobType.FIRST_CHARGE,
idempotencyKey = idempotencyKey(charge.id!!, ChargeEventJobType.FIRST_CHARGE, null),
additionalCan = additionalCan,
paymentGateway = paymentGateway,
container = container(paymentGateway),
methodSnapshot = FIRST_CHARGE_METHOD,
status = ChargeEventJobStatus.PROCESSING,
processingStartedAt = LocalDateTime.now()
)
return buildActiveEventSnapshot(charge, member, paymentGateway)
}
private fun buildActiveEventSnapshot(charge: Charge, member: Member, paymentGateway: PaymentGateway): ChargeEventJob? {
@@ -222,7 +190,6 @@ class ChargeEventJobService(
}
companion object {
private const val FIRST_CHARGE_METHOD = "첫 충전 이벤트"
private const val MAX_ERROR_LENGTH = 1000
}
}