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

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

View file

@ -0,0 +1,66 @@
package com.acquirex.approval.service;
import com.acquirex.approval.domain.ApprovalRequest;
import com.acquirex.approval.domain.ApprovalRequest.ApprovalStatus;
import com.acquirex.approval.dto.ApprovalDto.Request;
import com.acquirex.approval.dto.ApprovalDto.Response;
import com.acquirex.approval.repository.ApprovalRequestRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.UUID;
@Service
public class ApprovalService {
private final ApprovalRequestRepository repository;
public ApprovalService(ApprovalRequestRepository repository) {
this.repository = repository;
}
@Transactional
public Response processApproval(Request requestDto) {
ApprovalRequest request = new ApprovalRequest(
requestDto.getCardNumber(),
requestDto.getMerchantId(),
requestDto.getAmount(),
requestDto.getCurrency()
);
ApprovalRequest saved = repository.save(request);
if (validateRequest(requestDto)) {
String approvalCode = generateApprovalCode();
saved.setStatus(ApprovalStatus.APPROVED);
saved.setApprovalCode(approvalCode);
repository.save(saved);
return Response.approved(saved.getId(), approvalCode, saved.getAmount(), saved.getCurrency());
} else {
saved.setStatus(ApprovalStatus.DECLINED);
repository.save(saved);
return Response.declined(saved.getId(), "Validation failed");
}
}
@Transactional(readOnly = true)
public ApprovalRequest findById(Long id) {
return repository.findById(id)
.orElseThrow(() -> new IllegalArgumentException("Approval request not found: " + id));
}
@Transactional(readOnly = true)
public long countPendingApprovals() {
return repository.countByStatus(ApprovalStatus.PENDING);
}
private boolean validateRequest(Request dto) {
if (dto.getAmount() == null || dto.getAmount().signum() <= 0) return false;
if (dto.getCardNumber() == null || dto.getCardNumber().length() < 13) return false;
if (dto.getMerchantId() == null || dto.getMerchantId().isEmpty()) return false;
return dto.getCurrency() != null && dto.getCurrency().length() == 3;
}
private String generateApprovalCode() {
return "APP-" + UUID.randomUUID().toString().substring(0, 8).toUpperCase();
}
}