diff --git a/proj-acquirex/src/main/java/com/acquirex/approval/domain/AcquisitionApproval.java b/proj-acquirex/src/main/java/com/acquirex/approval/domain/AcquisitionApproval.java new file mode 100644 index 0000000..a4cf223 --- /dev/null +++ b/proj-acquirex/src/main/java/com/acquirex/approval/domain/AcquisitionApproval.java @@ -0,0 +1,86 @@ +package com.acquirex.approval.domain; + +import jakarta.persistence.*; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 카드 매입 승인 도메인 엔티티 + * Spring Boot 3: javax.* → jakarta.* 마이그레이션 + */ +@Entity +@Table(name = "acquisition_approval") +public class AcquisitionApproval { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "merchant_id", nullable = false, length = 20) + private String merchantId; + + @Column(name = "card_number", nullable = false, length = 19) + private String cardNumber; + + @Column(name = "approval_amount", nullable = false, precision = 15, scale = 2) + private BigDecimal approvalAmount; + + @Column(name = "approval_number", nullable = false, length = 12) + private String approvalNumber; + + @Enumerated(EnumType.STRING) + @Column(name = "status", nullable = false, length = 20) + private ApprovalStatus status; + + @Column(name = "approval_datetime", nullable = false) + private LocalDateTime approvalDatetime; + + @Column(name = "created_at", nullable = false) + private LocalDateTime createdAt; + + @Column(name = "updated_at") + private LocalDateTime updatedAt; + + public AcquisitionApproval() {} + + public AcquisitionApproval(String merchantId, String cardNumber, BigDecimal approvalAmount, + String approvalNumber, ApprovalStatus status, LocalDateTime approvalDatetime) { + this.merchantId = merchantId; + this.cardNumber = cardNumber; + this.approvalAmount = approvalAmount; + this.approvalNumber = approvalNumber; + this.status = status; + this.approvalDatetime = approvalDatetime; + this.createdAt = 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 getApprovalAmount() { return approvalAmount; } + public void setApprovalAmount(BigDecimal approvalAmount) { this.approvalAmount = approvalAmount; } + public String getApprovalNumber() { return approvalNumber; } + public void setApprovalNumber(String approvalNumber) { this.approvalNumber = approvalNumber; } + public ApprovalStatus getStatus() { return status; } + public void setStatus(ApprovalStatus status) { this.status = status; } + public LocalDateTime getApprovalDatetime() { return approvalDatetime; } + public void setApprovalDatetime(LocalDateTime approvalDatetime) { this.approvalDatetime = approvalDatetime; } + public LocalDateTime getCreatedAt() { return createdAt; } + public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; } + public LocalDateTime getUpdatedAt() { return updatedAt; } + public void setUpdatedAt(LocalDateTime updatedAt) { this.updatedAt = updatedAt; } + + @PreUpdate + protected void onUpdate() { this.updatedAt = LocalDateTime.now(); } + + /** 매입 승인 상태 열거형 */ + public enum ApprovalStatus { + PENDING("대기"), APPROVED("승인"), REJECTED("거절"), CANCELLED("취소"); + private final String description; + ApprovalStatus(String description) { this.description = description; } + public String getDescription() { return description; } + } +} \ No newline at end of file