package kr.wisestone.owl.service.impl; import kr.wisestone.owl.constant.MsgConstants; import kr.wisestone.owl.domain.PaymentHistory; import kr.wisestone.owl.domain.Workspace; import kr.wisestone.owl.exception.OwlRuntimeException; import kr.wisestone.owl.repository.PaymentHistoryRepository; import kr.wisestone.owl.service.PaymentHistoryService; import kr.wisestone.owl.web.form.PaymentForm; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service public class PaymentHistoryServiceImpl extends AbstractServiceImpl> implements PaymentHistoryService { private static final Logger log = LoggerFactory.getLogger(PaymentHistoryServiceImpl.class); @Autowired private PaymentHistoryRepository paymentHistoryRepository; @Override protected JpaRepository getRepository() { return this.paymentHistoryRepository; } @Override @Transactional public PaymentHistory addPaymentHistory(PaymentServiceImpl.RestClientResultObject resultObject, PaymentForm paymentForm, Workspace workspace) { PaymentHistory paymentHistory = new PaymentHistory(); paymentHistory.bindPaymentResult(resultObject); paymentHistory.setPrice(paymentForm.getPaymentAmount()); paymentHistory.setBuyUser(paymentForm.getBuyUser()); paymentHistory.setType(paymentForm.getType()); paymentHistory.setCustomerUid(paymentForm.getCustomerUid()); paymentHistory.setMerchantUid(paymentForm.getMerchantUid()); paymentHistory.setWorkspace(workspace); return this.paymentHistoryRepository.saveAndFlush(paymentHistory); } // 결제 시 오류가 발생했을 때 취소 정보를 저장한다. @Override @Transactional public PaymentHistory cancelPaymentHistory(PaymentForm paymentForm, Workspace workspace, String reason) { PaymentHistory paymentHistory = new PaymentHistory(); paymentHistory.setPrice(paymentForm.getPaymentAmount()); paymentHistory.setBuyUser(paymentForm.getBuyUser()); paymentHistory.setType(paymentForm.getType()); paymentHistory.setCustomerUid(paymentForm.getCustomerUid()); paymentHistory.setMerchantUid(paymentForm.getMerchantUid()); paymentHistory.setWorkspace(workspace); paymentHistory.setPaymentResult(PaymentHistory.PAYMENT_RESULT_FAILED); paymentHistory.setPaymentResponse(reason); return this.paymentHistoryRepository.saveAndFlush(paymentHistory); } // 해당 업무 공간에서 마지막으로 결제한 정보를 가져온다. @Override @Transactional(readOnly = true) public PaymentHistory findByWorkspaceLastPaymentHistory(Workspace workspace) { List paymentHistoryList = this.paymentHistoryRepository.findByWorkspaceId(workspace.getId()); if (paymentHistoryList.size() < 1) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.PAYMENT_NOT_EXIST)); } return paymentHistoryList.get(paymentHistoryList.size() - 1); } }