카드 매입 승인 경로 Spring Boot 3 전환 (ACX-E2E-1785394564819)
Some checks are pending
Verify / source-contract (push) Waiting to run
Some checks are pending
Verify / source-contract (push) Waiting to run
This commit is contained in:
parent
6b56326638
commit
ead3a4f1e4
1 changed files with 183 additions and 0 deletions
|
|
@ -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; }
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue