카드 매입 승인 경로 Spring Boot 3 전환 #7

Closed
forge-bot wants to merge 8 commits from forge/ACX-E2E-1785394564819-attempt-8-run-1514f10676f6 into main
Showing only changes of commit d671e38cba - Show all commits

View file

@ -0,0 +1,114 @@
package com.acquirex.cardapproval.domain;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import lombok.*;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
/**
* 카드 매입 승인 도메인 엔티티
* Jakarta Persistence API 3.1 (JPA 3.1) - Spring Boot 3.x
*/
@Entity
@Table(name = "acquisition_approvals")
@Getter @Setter @NoArgsConstructor @AllArgsConstructor @Builder
public class AcquisitionApproval {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank(message = "가맹점 번호는 필수입니다")
@Column(name = "merchant_id", nullable = false, length = 20)
private String merchantId;
@NotBlank(message = "카드번호는 필수입니다")
@Column(name = "card_number", nullable = false, length = 19)
private String cardNumber;
@NotNull @Positive
@Column(name = "acquisition_amount", nullable = false, precision = 15, scale = 2)
private BigDecimal acquisitionAmount;
@NotNull @Positive
@Column(name = "approval_amount", nullable = false, precision = 15, scale = 2)
private BigDecimal approvalAmount;
@NotBlank
@Column(name = "approval_number", nullable = false, length = 12)
private String approvalNumber;
@NotNull
@Column(name = "acquisition_datetime", nullable = false)
private LocalDateTime acquisitionDatetime;
@NotNull
@Enumerated(EnumType.STRING)
@Column(name = "approval_status", nullable = false, length = 20)
private ApprovalStatus approvalStatus;
@Column(name = "cancel_yn", length = 1)
@Builder.Default
private String cancelYn = "N";
@Column(name = "cancel_datetime")
private LocalDateTime cancelDatetime;
@Column(name = "cancel_reason", length = 200)
private String cancelReason;
@Column(name = "created_at", nullable = false, updatable = false)
private LocalDateTime createdAt;
@Column(name = "updated_at")
private LocalDateTime updatedAt;
@PrePersist
protected void onCreate() {
createdAt = LocalDateTime.now();
updatedAt = LocalDateTime.now();
}
@PreUpdate
protected void onUpdate() {
updatedAt = LocalDateTime.now();
}
public void cancel(String reason) {
this.cancelYn = "Y";
this.cancelDatetime = LocalDateTime.now();
this.cancelReason = reason;
this.approvalStatus = ApprovalStatus.CANCELLED;
}
public enum ApprovalStatus {
PENDING, APPROVED, REJECTED, CANCELLED, COMPLETED
}
}
/**
* 카드 매입 승인 레포지토리
* Spring Data JPA (Spring Boot 3.x)
*/
@Repository
interface AcquisitionApprovalRepository extends JpaRepository<AcquisitionApproval, Long> {
List<AcquisitionApproval> findByMerchantIdAndCancelYn(String merchantId, String cancelYn);
Optional<AcquisitionApproval> findByApprovalNumber(String approvalNumber);
@Query("SELECT a FROM AcquisitionApproval a WHERE a.acquisitionDatetime BETWEEN :startDate AND :endDate")
List<AcquisitionApproval> findByAcquisitionDatetimeBetween(
@Param("startDate") LocalDateTime startDate,
@Param("endDate") LocalDateTime endDate);
}