[#56] 예약 & 결제 프로세스 및 패키지 구조 재정의 #57

Merged
pricelees merged 45 commits from refactor/#56 into main 2025-10-09 09:33:29 +00:00
2 changed files with 29 additions and 20 deletions
Showing only changes of commit 97be1b8a1f - Show all commits

View File

@ -2,15 +2,10 @@ package com.sangdol.roomescape.payment.business
import com.sangdol.common.persistence.TransactionExecutionUtil
import com.sangdol.roomescape.payment.business.domain.UserFacingPaymentErrorCode
import com.sangdol.roomescape.payment.dto.PaymentCancelRequest
import com.sangdol.roomescape.payment.dto.*
import com.sangdol.roomescape.payment.exception.ExternalPaymentException
import com.sangdol.roomescape.payment.exception.PaymentErrorCode
import com.sangdol.roomescape.payment.exception.PaymentException
import com.sangdol.roomescape.payment.dto.PaymentGatewayCancelResponse
import com.sangdol.roomescape.payment.dto.PaymentConfirmRequest
import com.sangdol.roomescape.payment.dto.PaymentCreateResponse
import com.sangdol.roomescape.payment.dto.PaymentGatewayResponse
import com.sangdol.roomescape.payment.dto.PaymentResponse
import com.sangdol.roomescape.payment.infrastructure.client.TosspayClient
import com.sangdol.roomescape.payment.infrastructure.persistence.*
import com.sangdol.roomescape.payment.mapper.toResponse
@ -36,20 +31,28 @@ class PaymentService(
return paymentClient.confirm(request.paymentKey, request.orderId, request.amount).also {
log.info { "[requestConfirm] 결제 완료: paymentKey=${request.paymentKey}" }
}
} catch (e: ExternalPaymentException) {
val errorCode = if (e.httpStatusCode in 400..<500) {
PaymentErrorCode.PAYMENT_CLIENT_ERROR
} else {
PaymentErrorCode.PAYMENT_PROVIDER_ERROR
}
} catch (e: Exception) {
when(e) {
is ExternalPaymentException -> {
val errorCode = if (e.httpStatusCode in 400..<500) {
PaymentErrorCode.PAYMENT_CLIENT_ERROR
} else {
PaymentErrorCode.PAYMENT_PROVIDER_ERROR
}
val message = if (UserFacingPaymentErrorCode.contains(e.errorCode)) {
"${errorCode.message}(${e.message})"
} else {
errorCode.message
}
val message = if (UserFacingPaymentErrorCode.contains(e.errorCode)) {
"${errorCode.message}(${e.message})"
} else {
errorCode.message
}
throw PaymentException(errorCode, message)
throw PaymentException(errorCode, message)
}
else -> {
log.warn(e) { "[requestConfirm] 예상치 못한 결제 실패: paymentKey=${request.paymentKey}" }
throw PaymentException(PaymentErrorCode.PAYMENT_UNEXPECTED_ERROR)
}
}
}
}

View File

@ -142,10 +142,16 @@ private class TosspayErrorHandler(
): Nothing {
val requestType: String = paymentRequestType(url)
val errorResponse: TosspayErrorResponse = parseResponse(response)
log.warn { "[TosspayClient] $requestType 요청 실패: response: $errorResponse" }
val status = response.statusCode
if (status.is5xxServerError) {
log.warn { "[TosspayClient] $requestType 요청 실패: response: $errorResponse" }
} else {
log.info { "[TosspayClient] $requestType 요청 실패: response: $errorResponse" }
}
throw ExternalPaymentException(
httpStatusCode = response.statusCode.value(),
httpStatusCode = status.value(),
errorCode = errorResponse.code,
message = errorResponse.message
)