diff --git a/proj-acquirex/src/main/java/com/acquirex/approval/CardAcquisitionApprovalService.java b/proj-acquirex/src/main/java/com/acquirex/approval/CardAcquisitionApprovalService.java new file mode 100644 index 0000000..9bb2985 --- /dev/null +++ b/proj-acquirex/src/main/java/com/acquirex/approval/CardAcquisitionApprovalService.java @@ -0,0 +1,59 @@ +package com.acquirex.approval; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +@Slf4j +@Service +public class CardAcquisitionApprovalService { + private final Map approvalStore = new ConcurrentHashMap<>(); + + public CardAcquisitionApprovalResponse processApproval(CardAcquisitionApprovalRequest request) { + log.info("카드 매입 승인 요청 처리: merchantId={}, amount={}", + request.getMerchantId(), request.getTransactionAmount()); + + String approvalId = generateApprovalId(); + CardAcquisitionApprovalStatus status = determineApprovalStatus(request); + + CardAcquisitionApprovalResponse response = CardAcquisitionApprovalResponse.builder() + .approvalId(approvalId) + .merchantId(request.getMerchantId()) + .cardCompanyCode(request.getCardCompanyCode()) + .transactionAmount(request.getTransactionAmount()) + .status(status) + .statusMessage(status.getDescription()) + .approvalDateTime(LocalDateTime.now()) + .responseCode(status == CardAcquisitionApprovalStatus.APPROVED ? "0000" : "9999") + .responseMessage(status == CardAcquisitionApprovalStatus.APPROVED ? "승인 완료" : "승인 실패") + .build(); + + approvalStore.put(approvalId, response); + log.info("카드 매입 승인 완료: approvalId={}, status={}", approvalId, status); + return response; + } + + public CardAcquisitionApprovalResponse getApprovalStatus(String approvalId) { + log.info("승인 상태 조회: approvalId={}", approvalId); + return approvalStore.get(approvalId); + } + + private CardAcquisitionApprovalStatus determineApprovalStatus(CardAcquisitionApprovalRequest request) { + if (request.getTransactionAmount() == null) { + return CardAcquisitionApprovalStatus.REJECTED; + } + if (request.getTransactionAmount().compareTo(new BigDecimal("100000")) >= 0) { + return CardAcquisitionApprovalStatus.PROCESSING; + } + return CardAcquisitionApprovalStatus.APPROVED; + } + + private String generateApprovalId() { + return "APR-" + UUID.randomUUID().toString().substring(0, 8).toUpperCase(); + } +}