refactor: 결제 취소 시 취소시간을 애플리케이션에서 지정하도록 수정

This commit is contained in:
이상진 2025-08-18 15:54:23 +09:00
parent b38a5242ce
commit 1f3f57ba1c
3 changed files with 16 additions and 10 deletions

View File

@ -9,15 +9,11 @@ import roomescape.payment.exception.PaymentErrorCode
import roomescape.payment.exception.PaymentException import roomescape.payment.exception.PaymentException
import roomescape.payment.infrastructure.client.v2.* import roomescape.payment.infrastructure.client.v2.*
import roomescape.payment.infrastructure.common.PaymentMethod import roomescape.payment.infrastructure.common.PaymentMethod
import roomescape.payment.infrastructure.persistence.v2.CanceledPaymentRepositoryV2 import roomescape.payment.infrastructure.persistence.v2.*
import roomescape.payment.infrastructure.persistence.v2.CanceledPaymentEntityV2
import roomescape.payment.infrastructure.persistence.v2.PaymentDetailEntity
import roomescape.payment.infrastructure.persistence.v2.PaymentDetailRepository
import roomescape.payment.infrastructure.persistence.v2.PaymentEntityV2
import roomescape.payment.infrastructure.persistence.v2.PaymentRepositoryV2
import roomescape.reservation.web.ReservationCancelRequest import roomescape.reservation.web.ReservationCancelRequest
import roomescape.reservation.web.ReservationPaymentRequest import roomescape.reservation.web.ReservationPaymentRequest
import roomescape.reservation.web.toPaymentConfirmRequest import roomescape.reservation.web.toPaymentConfirmRequest
import java.time.LocalDateTime
private val log: KLogger = KotlinLogging.logger {} private val log: KLogger = KotlinLogging.logger {}
@ -100,9 +96,10 @@ class PaymentWriterV2(
memberId: Long, memberId: Long,
reservationId: Long, reservationId: Long,
request: ReservationCancelRequest, request: ReservationCancelRequest,
paymentCancelResponse: PaymentCancelResponseV2 paymentCancelResponse: PaymentCancelResponseV2,
requestedAt: LocalDateTime
) { ) {
val payment: PaymentEntityV2= paymentRepository.findByReservationId(reservationId) val payment: PaymentEntityV2 = paymentRepository.findByReservationId(reservationId)
?.also { it.cancel() } ?.also { it.cancel() }
?: throw PaymentException(PaymentErrorCode.PAYMENT_NOT_FOUND) ?: throw PaymentException(PaymentErrorCode.PAYMENT_NOT_FOUND)
@ -111,9 +108,14 @@ class PaymentWriterV2(
CanceledPaymentEntityV2( CanceledPaymentEntityV2(
id = tsidFactory.next(), id = tsidFactory.next(),
canceledAt = cancelDetail.canceledAt, canceledAt = cancelDetail.canceledAt,
requestedAt = requestedAt,
paymentId = payment.id, paymentId = payment.id,
canceledBy = memberId, canceledBy = memberId,
cancelReason = request.cancelReason cancelReason = request.cancelReason,
cancelAmount = cancelDetail.cancelAmount,
cardDiscountAmount = cancelDetail.cardDiscountAmount,
transferDiscountAmount = cancelDetail.transferDiscountAmount,
easypayDiscountAmount = cancelDetail.easyPayDiscountAmount,
).also { canceledPaymentRepository.save(it) } ).also { canceledPaymentRepository.save(it) }
} }
} }

View File

@ -3,6 +3,7 @@ package roomescape.payment.infrastructure.persistence.v2
import jakarta.persistence.Entity import jakarta.persistence.Entity
import jakarta.persistence.Table import jakarta.persistence.Table
import roomescape.common.entity.PersistableBaseEntity import roomescape.common.entity.PersistableBaseEntity
import java.time.LocalDateTime
import java.time.OffsetDateTime import java.time.OffsetDateTime
@Entity @Entity
@ -11,6 +12,7 @@ class CanceledPaymentEntityV2(
id: Long, id: Long,
val paymentId: Long, val paymentId: Long,
val requestedAt: LocalDateTime,
val canceledAt: OffsetDateTime, val canceledAt: OffsetDateTime,
val canceledBy: Long, val canceledBy: Long,
val cancelReason: String?, val cancelReason: String?,

View File

@ -13,6 +13,7 @@ import roomescape.reservation.implement.ReservationWriter
import roomescape.reservation.infrastructure.persistence.ReservationEntity import roomescape.reservation.infrastructure.persistence.ReservationEntity
import roomescape.reservation.infrastructure.persistence.ReservationStatus import roomescape.reservation.infrastructure.persistence.ReservationStatus
import roomescape.reservation.web.* import roomescape.reservation.web.*
import java.time.LocalDateTime
private val log: KLogger = KotlinLogging.logger {} private val log: KLogger = KotlinLogging.logger {}
@ -88,6 +89,7 @@ class ReservationWithPaymentServiceV2(
reservationId: Long, reservationId: Long,
request: ReservationCancelRequest request: ReservationCancelRequest
) { ) {
val requestedAt: LocalDateTime = LocalDateTime.now()
log.info { log.info {
"[ReservationWithPaymentServiceV2.cancelReservation] " + "[ReservationWithPaymentServiceV2.cancelReservation] " +
"예약 취소 시작: memberId=$memberId, reservationId=$reservationId, request=$request" "예약 취소 시작: memberId=$memberId, reservationId=$reservationId, request=$request"
@ -96,7 +98,7 @@ class ReservationWithPaymentServiceV2(
val paymentCancelResponse = paymentWriter.requestCancelPayment(reservationId, request) val paymentCancelResponse = paymentWriter.requestCancelPayment(reservationId, request)
transactionExecutionUtil.withNewTransaction(isReadOnly = false) { transactionExecutionUtil.withNewTransaction(isReadOnly = false) {
paymentWriter.createCanceledPayment(memberId, reservationId, request, paymentCancelResponse) paymentWriter.createCanceledPayment(memberId, reservationId, request, paymentCancelResponse, requestedAt)
reservationFinder.findById(reservationId).also { reservationWriter.cancelByUser(it, memberId) } reservationFinder.findById(reservationId).also { reservationWriter.cancelByUser(it, memberId) }
} }
} }