[#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.common.persistence.TransactionExecutionUtil
import com.sangdol.roomescape.payment.business.domain.UserFacingPaymentErrorCode 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.ExternalPaymentException
import com.sangdol.roomescape.payment.exception.PaymentErrorCode import com.sangdol.roomescape.payment.exception.PaymentErrorCode
import com.sangdol.roomescape.payment.exception.PaymentException 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.client.TosspayClient
import com.sangdol.roomescape.payment.infrastructure.persistence.* import com.sangdol.roomescape.payment.infrastructure.persistence.*
import com.sangdol.roomescape.payment.mapper.toResponse import com.sangdol.roomescape.payment.mapper.toResponse
@ -36,7 +31,9 @@ class PaymentService(
return paymentClient.confirm(request.paymentKey, request.orderId, request.amount).also { return paymentClient.confirm(request.paymentKey, request.orderId, request.amount).also {
log.info { "[requestConfirm] 결제 완료: paymentKey=${request.paymentKey}" } log.info { "[requestConfirm] 결제 완료: paymentKey=${request.paymentKey}" }
} }
} catch (e: ExternalPaymentException) { } catch (e: Exception) {
when(e) {
is ExternalPaymentException -> {
val errorCode = if (e.httpStatusCode in 400..<500) { val errorCode = if (e.httpStatusCode in 400..<500) {
PaymentErrorCode.PAYMENT_CLIENT_ERROR PaymentErrorCode.PAYMENT_CLIENT_ERROR
} else { } else {
@ -51,6 +48,12 @@ class PaymentService(
throw PaymentException(errorCode, message) throw PaymentException(errorCode, message)
} }
else -> {
log.warn(e) { "[requestConfirm] 예상치 못한 결제 실패: paymentKey=${request.paymentKey}" }
throw PaymentException(PaymentErrorCode.PAYMENT_UNEXPECTED_ERROR)
}
}
}
} }
fun savePayment( fun savePayment(

View File

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