카드 매입 승인 경로 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