refactor: CanceledPaymentEntity 코틀린 전환 및 validation 테스트 제거

This commit is contained in:
이상진 2025-07-16 13:37:25 +09:00
parent a92339f7d4
commit 2c61d9ff2b
3 changed files with 16 additions and 87 deletions

View File

@ -44,7 +44,7 @@ public class PaymentService {
}
public void saveCanceledPayment(PaymentCancel.Response cancelInfo, OffsetDateTime approvedAt, String paymentKey) {
canceledPaymentRepository.save(new CanceledPaymentEntity(
canceledPaymentRepository.save(new CanceledPaymentEntity(null,
paymentKey, cancelInfo.cancelReason, cancelInfo.cancelAmount, approvedAt, cancelInfo.canceledAt));
}
@ -64,7 +64,7 @@ public class PaymentService {
.orElseThrow(() -> throwPaymentNotFoundByPaymentKey(paymentKey));
paymentRepository.delete(paymentEntity);
return canceledPaymentRepository.save(new CanceledPaymentEntity(paymentKey, cancelReason, paymentEntity.getTotalAmount(),
return canceledPaymentRepository.save(new CanceledPaymentEntity(null, paymentKey, cancelReason, paymentEntity.getTotalAmount(),
paymentEntity.getApprovedAt(), canceledAt));
}

View File

@ -1,67 +1,18 @@
package roomescape.payment.infrastructure.persistence;
package roomescape.payment.infrastructure.persistence
import java.time.OffsetDateTime;
import org.springframework.http.HttpStatus;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import roomescape.common.exception.ErrorType;
import roomescape.common.exception.RoomescapeException;
import jakarta.persistence.*
import java.time.OffsetDateTime
@Entity
public class CanceledPaymentEntity {
@Table(name = "canceled_payment")
class CanceledPaymentEntity(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
var id: Long? = null,
private String paymentKey;
private String cancelReason;
private Long cancelAmount;
private OffsetDateTime approvedAt;
private OffsetDateTime canceledAt;
protected CanceledPaymentEntity() {
}
public CanceledPaymentEntity(String paymentKey, String cancelReason, Long cancelAmount, OffsetDateTime approvedAt,
OffsetDateTime canceledAt) {
validateDate(approvedAt, canceledAt);
this.paymentKey = paymentKey;
this.cancelReason = cancelReason;
this.cancelAmount = cancelAmount;
this.approvedAt = approvedAt;
this.canceledAt = canceledAt;
}
private void validateDate(OffsetDateTime approvedAt, OffsetDateTime canceledAt) {
if (canceledAt.isBefore(approvedAt)) {
throw new RoomescapeException(ErrorType.CANCELED_BEFORE_PAYMENT,
String.format("[approvedAt: %s, canceledAt: %s]", approvedAt, canceledAt),
HttpStatus.CONFLICT);
}
}
public String getCancelReason() {
return cancelReason;
}
public Long getCancelAmount() {
return cancelAmount;
}
public OffsetDateTime getApprovedAt() {
return approvedAt;
}
public OffsetDateTime getCanceledAt() {
return canceledAt;
}
public void setCanceledAt(OffsetDateTime canceledAt) {
this.canceledAt = canceledAt;
}
}
var paymentKey: String,
var cancelReason: String,
var cancelAmount: Long,
var approvedAt: OffsetDateTime,
var canceledAt: OffsetDateTime,
)

View File

@ -1,22 +0,0 @@
package roomescape.payment.infrastructure.persistence;
import static org.assertj.core.api.Assertions.*;
import java.time.OffsetDateTime;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import roomescape.common.exception.RoomescapeException;
class CanceledPaymentEntityTest {
@Test
@DisplayName("취소 날짜가 승인 날짜 이전이면 예외가 발생한다")
void invalidDate() {
OffsetDateTime approvedAt = OffsetDateTime.now();
OffsetDateTime canceledAt = approvedAt.minusMinutes(1L);
assertThatThrownBy(() -> new CanceledPaymentEntity("payment-key", "reason", 10000L, approvedAt, canceledAt))
.isInstanceOf(RoomescapeException.class);
}
}