diff --git a/proj-acquirex/src/main/java/com/acquirex/approval/domain/ApprovalDomain.java b/proj-acquirex/src/main/java/com/acquirex/approval/domain/ApprovalDomain.java new file mode 100644 index 0000000..24a976b --- /dev/null +++ b/proj-acquirex/src/main/java/com/acquirex/approval/domain/ApprovalDomain.java @@ -0,0 +1,76 @@ +package com.acquirex.approval.domain; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.UUID; + +/** 카드 매입 승인 도메인 - Jakarta EE 9+ */ +public class ApprovalDomain { + + public enum Status { PENDING, APPROVED, REJECTED, CANCELLED } + + public static class Request { + @NotBlank(message = "거래 ID는 필수입니다") + private String transactionId; + @NotBlank(message = "가맹점 ID는 필수입니다") + private String merchantId; + @NotNull @Positive private BigDecimal amount; + @NotBlank private String cardNumber; + private LocalDateTime requestTime = LocalDateTime.now(); + + public Request() {} + public Request(String transactionId, String merchantId, BigDecimal amount, String cardNumber) { + this.transactionId = transactionId; this.merchantId = merchantId; + this.amount = amount; this.cardNumber = cardNumber; + } + public String getTransactionId() { return transactionId; } + public void setTransactionId(String transactionId) { this.transactionId = transactionId; } + public String getMerchantId() { return merchantId; } + public void setMerchantId(String merchantId) { this.merchantId = merchantId; } + public BigDecimal getAmount() { return amount; } + public void setAmount(BigDecimal amount) { this.amount = amount; } + public String getCardNumber() { return cardNumber; } + public void setCardNumber(String cardNumber) { this.cardNumber = cardNumber; } + public LocalDateTime getRequestTime() { return requestTime; } + } + + public static class Response { + private String approvalId; + private String transactionId; + private Status status; + private String message; + private LocalDateTime approvalTime = LocalDateTime.now(); + + public Response() {} + public Response(String approvalId, String transactionId, Status status, String message) { + this.approvalId = approvalId; this.transactionId = transactionId; + this.status = status; this.message = message; + } + public static Response success(String approvalId, String transactionId) { + return new Response(approvalId, transactionId, Status.APPROVED, "매입 승인 완료"); + } + public static Response rejected(String transactionId, String reason) { + return new Response(null, transactionId, Status.REJECTED, reason); + } + public static Response cancelled(String approvalId) { + return new Response(approvalId, null, Status.CANCELLED, "매입 취소 완료"); + } + public String getApprovalId() { return approvalId; } + public void setApprovalId(String approvalId) { this.approvalId = approvalId; } + public String getTransactionId() { return transactionId; } + public void setTransactionId(String transactionId) { this.transactionId = transactionId; } + public Status getStatus() { return status; } + public void setStatus(Status status) { this.status = status; } + public String getMessage() { return message; } + public void setMessage(String message) { this.message = message; } + public LocalDateTime getApprovalTime() { return approvalTime; } + public void setApprovalTime(LocalDateTime approvalTime) { this.approvalTime = approvalTime; } + } + + public static String generateApprovalId() { + return "APR-" + UUID.randomUUID().toString().substring(0, 8).toUpperCase(); + } +} \ No newline at end of file