캔 결제 메시지 다국어 처리

This commit is contained in:
2025-12-23 18:09:17 +09:00
parent 58f7a8654b
commit 6e8a88178c
11 changed files with 358 additions and 110 deletions

View File

@@ -18,6 +18,8 @@ import kr.co.vividnext.sodalive.common.SodaException
import kr.co.vividnext.sodalive.content.AudioContent
import kr.co.vividnext.sodalive.content.order.Order
import kr.co.vividnext.sodalive.explorer.profile.creatorCommunity.CreatorCommunity
import kr.co.vividnext.sodalive.i18n.LangContext
import kr.co.vividnext.sodalive.i18n.SodaMessageSource
import kr.co.vividnext.sodalive.live.room.LiveRoom
import kr.co.vividnext.sodalive.member.Member
import kr.co.vividnext.sodalive.member.MemberRepository
@@ -31,7 +33,9 @@ class CanPaymentService(
private val memberRepository: MemberRepository,
private val chargeRepository: ChargeRepository,
private val useCanRepository: UseCanRepository,
private val useCanCalculateRepository: UseCanCalculateRepository
private val useCanCalculateRepository: UseCanCalculateRepository,
private val messageSource: SodaMessageSource,
private val langContext: LangContext
) {
@Transactional
fun spendCan(
@@ -49,7 +53,7 @@ class CanPaymentService(
container: String
) {
val member = memberRepository.findByIdOrNull(id = memberId)
?: throw SodaException("잘못된 요청입니다.\n다시 시도해 주세요.")
?: throw SodaException(messageKey = "can.payment.invalid_request_retry")
val useRewardCan = spendRewardCan(member, needCan, container)
val useChargeCan = if (needCan - useRewardCan.total > 0) {
spendChargeCan(member, needCan = needCan - useRewardCan.total, container = container)
@@ -58,14 +62,14 @@ class CanPaymentService(
}
if (needCan - useRewardCan.total - (useChargeCan?.total ?: 0) > 0) {
val shortCan = needCan - useRewardCan.total - (useChargeCan?.total ?: 0)
throw SodaException(
"${needCan - useRewardCan.total - (useChargeCan?.total ?: 0)} " +
"캔이 부족합니다. 충전 후 이용해 주세요."
formatMessage("can.payment.insufficient_can", shortCan)
)
}
if (!useRewardCan.verify() || useChargeCan?.verify() == false) {
throw SodaException("잘못된 요청입니다.\n다시 시도해 주세요.")
throw SodaException(messageKey = "can.payment.invalid_request_retry")
}
val useCan = UseCan(
@@ -121,7 +125,7 @@ class CanPaymentService(
useCan.chatRoomId = chatRoomId
useCan.characterId = characterId
} else {
throw SodaException("잘못된 요청입니다.")
throw SodaException(messageKey = "common.error.invalid_request")
}
useCanRepository.save(useCan)
@@ -306,20 +310,20 @@ class CanPaymentService(
@Transactional
fun refund(memberId: Long, roomId: Long) {
val member = memberRepository.findByIdOrNull(memberId)
?: throw SodaException("잘못된 예약정보 입니다.")
?: throw SodaException(messageKey = "can.payment.invalid_reservation")
val useCan = repository.getCanUsedForLiveRoomNotRefund(
memberId = memberId,
roomId = roomId,
canUsage = CanUsage.LIVE
) ?: throw SodaException("잘못된 예약정보 입니다.")
) ?: throw SodaException(messageKey = "can.payment.invalid_reservation")
useCan.isRefund = true
val useCanCalculates = useCanCalculateRepository.findByUseCanIdAndStatus(useCan.id!!)
useCanCalculates.forEach {
it.status = UseCanCalculateStatus.REFUND
val charge = Charge(0, it.can, status = ChargeStatus.REFUND_CHARGE)
charge.title = "${it.can}"
charge.title = formatMessage("can.charge.title", it.can)
charge.useCan = useCan
when (it.paymentGateway) {
@@ -333,7 +337,9 @@ class CanPaymentService(
status = PaymentStatus.COMPLETE,
paymentGateway = it.paymentGateway
)
payment.method = "환불"
payment.method = messageSource
.getMessage("can.payment.method.refund", langContext.lang)
.orEmpty()
charge.payment = payment
chargeRepository.save(charge)
@@ -348,7 +354,7 @@ class CanPaymentService(
container: String
) {
val member = memberRepository.findByIdOrNull(id = memberId)
?: throw SodaException("잘못된 요청입니다.\n다시 시도해 주세요.")
?: throw SodaException(messageKey = "can.payment.invalid_request_retry")
val useRewardCan = spendRewardCan(member, needCan, container)
val useChargeCan = if (needCan - useRewardCan.total > 0) {
@@ -358,14 +364,14 @@ class CanPaymentService(
}
if (needCan - useRewardCan.total - (useChargeCan?.total ?: 0) > 0) {
val shortCan = needCan - useRewardCan.total - (useChargeCan?.total ?: 0)
throw SodaException(
"${needCan - useRewardCan.total - (useChargeCan?.total ?: 0)} " +
"캔이 부족합니다. 충전 후 이용해 주세요."
formatMessage("can.payment.insufficient_can", shortCan)
)
}
if (!useRewardCan.verify() || useChargeCan?.verify() == false) {
throw SodaException("잘못된 요청입니다.\n다시 시도해 주세요.")
throw SodaException(messageKey = "can.payment.invalid_request_retry")
}
val useCan = UseCan(
@@ -394,7 +400,7 @@ class CanPaymentService(
container: String
) {
val member = memberRepository.findByIdOrNull(id = memberId)
?: throw SodaException("잘못된 요청입니다.\n다시 시도해 주세요.")
?: throw SodaException(messageKey = "can.payment.invalid_request_retry")
val useRewardCan = spendRewardCan(member, needCan, container)
val useChargeCan = if (needCan - useRewardCan.total > 0) {
@@ -404,14 +410,14 @@ class CanPaymentService(
}
if (needCan - useRewardCan.total - (useChargeCan?.total ?: 0) > 0) {
val shortCan = needCan - useRewardCan.total - (useChargeCan?.total ?: 0)
throw SodaException(
"${needCan - useRewardCan.total - (useChargeCan?.total ?: 0)} " +
"캔이 부족합니다. 충전 후 이용해 주세요."
formatMessage("can.payment.insufficient_can", shortCan)
)
}
if (!useRewardCan.verify() || useChargeCan?.verify() == false) {
throw SodaException("잘못된 요청입니다.\n다시 시도해 주세요.")
throw SodaException(messageKey = "can.payment.invalid_request_retry")
}
val useCan = UseCan(
@@ -435,4 +441,9 @@ class CanPaymentService(
setUseCanCalculate(null, useRewardCan, useChargeCan, useCan, paymentGateway = PaymentGateway.GOOGLE_IAP)
setUseCanCalculate(null, useRewardCan, useChargeCan, useCan, paymentGateway = PaymentGateway.APPLE_IAP)
}
private fun formatMessage(key: String, vararg args: Any): String {
val template = messageSource.getMessage(key, langContext.lang) ?: return ""
return String.format(template, *args)
}
}