카드 매입 승인 경로 Spring Boot 3 전환 (ACX-E2E-1785394564819)
Some checks are pending
Verify / source-contract (push) Waiting to run

This commit is contained in:
forge-bot 2026-07-30 12:16:38 +00:00
parent 6b56326638
commit ead3a4f1e4

View file

@ -0,0 +1,183 @@
package com.acquirex.cardacquisition.entity;
import jakarta.persistence.*;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/** Spring Boot 3 전환: javax.persistence → jakarta.persistence */
@Entity
@Table(name = "card_acquisitions")
public class CardAcquisition {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "merchant_id", nullable = false)
private String merchantId;
@Column(name = "card_number", nullable = false)
private String cardNumber;
@Column(name = "amount", nullable = false, precision = 15, scale = 2)
private BigDecimal amount;
@Column(name = "currency", nullable = false, length = 3)
private String currency;
@Enumerated(EnumType.STRING)
@Column(name = "status", nullable = false)
private AcquisitionStatus status = AcquisitionStatus.PENDING;
@Column(name = "approval_code")
private String approvalCode;
@Column(name = "request_time", nullable = false)
private LocalDateTime requestTime = LocalDateTime.now();
@Column(name = "approval_time")
private LocalDateTime approvalTime;
@Column(name = "reject_reason")
private String rejectReason;
public CardAcquisition() {}
public CardAcquisition(String merchantId, String cardNumber, BigDecimal amount, String currency) {
this.merchantId = merchantId;
this.cardNumber = cardNumber;
this.amount = amount;
this.currency = currency;
this.status = AcquisitionStatus.PENDING;
this.requestTime = LocalDateTime.now();
}
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getMerchantId() { return merchantId; }
public void setMerchantId(String merchantId) { this.merchantId = merchantId; }
public String getCardNumber() { return cardNumber; }
public void setCardNumber(String cardNumber) { this.cardNumber = cardNumber; }
public BigDecimal getAmount() { return amount; }
public void setAmount(BigDecimal amount) { this.amount = amount; }
public String getCurrency() { return currency; }
public void setCurrency(String currency) { this.currency = currency; }
public AcquisitionStatus getStatus() { return status; }
public void setStatus(AcquisitionStatus status) { this.status = status; }
public String getApprovalCode() { return approvalCode; }
public void setApprovalCode(String approvalCode) { this.approvalCode = approvalCode; }
public LocalDateTime getRequestTime() { return requestTime; }
public void setRequestTime(LocalDateTime requestTime) { this.requestTime = requestTime; }
public LocalDateTime getApprovalTime() { return approvalTime; }
public void setApprovalTime(LocalDateTime approvalTime) { this.approvalTime = approvalTime; }
public String getRejectReason() { return rejectReason; }
public void setRejectReason(String rejectReason) { this.rejectReason = rejectReason; }
public void approve(String approvalCode) {
this.status = AcquisitionStatus.APPROVED;
this.approvalCode = approvalCode;
this.approvalTime = LocalDateTime.now();
}
public void reject(String reason) {
this.status = AcquisitionStatus.REJECTED;
this.rejectReason = reason;
this.approvalTime = LocalDateTime.now();
}
/** Spring Boot 3 전환: javax.persistence → jakarta.persistence */
public enum AcquisitionStatus {
PENDING, APPROVED, REJECTED, CANCELLED
}
}
/** Spring Boot 3 전환: javax.validation → jakarta.validation */
class AcquisitionRequest {
@NotBlank(message = "상점 ID는 필수입니다")
private String merchantId;
@NotBlank(message = "카드번호는 필수입니다")
@Pattern(regexp = "\\d{10,19}", message = "유효하지 않은 카드번호 형식입니다")
private String cardNumber;
@NotNull(message = "금액은 필수입니다")
@DecimalMin(value = "0.01", message = "금액은 0보다 커야 합니다")
private BigDecimal amount;
@NotBlank(message = "통화는 필수입니다")
@Size(min = 3, max = 3, message = "통화 코드는 3자리입니다")
private String currency;
public AcquisitionRequest() {}
public AcquisitionRequest(String merchantId, String cardNumber, BigDecimal amount, String currency) {
this.merchantId = merchantId;
this.cardNumber = cardNumber;
this.amount = amount;
this.currency = currency;
}
public String getMerchantId() { return merchantId; }
public void setMerchantId(String merchantId) { this.merchantId = merchantId; }
public String getCardNumber() { return cardNumber; }
public void setCardNumber(String cardNumber) { this.cardNumber = cardNumber; }
public BigDecimal getAmount() { return amount; }
public void setAmount(BigDecimal amount) { this.amount = amount; }
public String getCurrency() { return currency; }
public void setCurrency(String currency) { this.currency = currency; }
}
class AcquisitionResponse {
private Long id;
private String merchantId;
private String maskedCardNumber;
private BigDecimal amount;
private String currency;
private CardAcquisition.AcquisitionStatus status;
private String approvalCode;
private LocalDateTime requestTime;
private LocalDateTime approvalTime;
private String message;
public AcquisitionResponse() {}
public static AcquisitionResponse fromEntity(CardAcquisition entity) {
AcquisitionResponse response = new AcquisitionResponse();
response.setId(entity.getId());
response.setMerchantId(entity.getMerchantId());
response.setMaskedCardNumber(maskCardNumber(entity.getCardNumber()));
response.setAmount(entity.getAmount());
response.setCurrency(entity.getCurrency());
response.setStatus(entity.getStatus());
response.setApprovalCode(entity.getApprovalCode());
response.setRequestTime(entity.getRequestTime());
response.setApprovalTime(entity.getApprovalTime());
return response;
}
private static String maskCardNumber(String cardNumber) {
if (cardNumber == null || cardNumber.length() < 8) return "****";
return cardNumber.substring(0, 4) + "****" + cardNumber.substring(cardNumber.length() - 4);
}
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getMerchantId() { return merchantId; }
public void setMerchantId(String merchantId) { this.merchantId = merchantId; }
public String getMaskedCardNumber() { return maskedCardNumber; }
public void setMaskedCardNumber(String maskedCardNumber) { this.maskedCardNumber = maskedCardNumber; }
public BigDecimal getAmount() { return amount; }
public void setAmount(BigDecimal amount) { this.amount = amount; }
public String getCurrency() { return currency; }
public void setCurrency(String currency) { this.currency = currency; }
public CardAcquisition.AcquisitionStatus getStatus() { return status; }
public void setStatus(CardAcquisition.AcquisitionStatus status) { this.status = status; }
public String getApprovalCode() { return approvalCode; }
public void setApprovalCode(String approvalCode) { this.approvalCode = approvalCode; }
public LocalDateTime getRequestTime() { return requestTime; }
public void setRequestTime(LocalDateTime requestTime) { this.requestTime = requestTime; }
public LocalDateTime getApprovalTime() { return approvalTime; }
public void setApprovalTime(LocalDateTime approvalTime) { this.approvalTime = approvalTime; }
public String getMessage() { return message; }
public void setMessage(String message) { this.message = message; }
}