package zw.qantra.tm.domain.services; import lombok.Getter; import lombok.RequiredArgsConstructor; import java.util.List; import java.util.UUID; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import zw.qantra.tm.domain.enums.RequestType; import zw.qantra.tm.domain.enums.Status; import zw.qantra.tm.domain.models.AdditionalData; import zw.qantra.tm.domain.models.Provider; import zw.qantra.tm.domain.models.Transaction; import zw.qantra.tm.domain.repositories.TransactionRepository; import zw.qantra.tm.domain.services.factories.PaymentProcessorFactory; import zw.qantra.tm.domain.services.processors.TransactionProcessorInterface; import zw.qantra.tm.domain.services.processors.handlers.CalculateChargesHandler; import zw.qantra.tm.domain.services.processors.handlers.ConfirmationLabelHandler; import zw.qantra.tm.domain.services.processors.handlers.ConfirmationLogicHandler; import zw.qantra.tm.domain.services.processors.handlers.FormattingHandler; import zw.qantra.tm.domain.services.processors.handlers.LogicPipeline; import zw.qantra.tm.domain.services.processors.handlers.RecipientsUpdateHandler; import zw.qantra.tm.domain.services.processors.handlers.ValidationHandler; import zw.qantra.tm.domain.services.processors.handlers.erp.*; import zw.qantra.tm.domain.models.TransactionEvent; import zw.qantra.tm.exceptions.ApiException; import zw.qantra.tm.utils.Utils; @Service @RequiredArgsConstructor public class TransactionService { Logger logger = LoggerFactory.getLogger(TransactionService.class); @Getter private final TransactionRepository transactionRepository; private final AdditionalDataService additionalDataService; public Transaction findById(UUID id) { Transaction transaction = transactionRepository.findById(id).orElseThrow(() -> new ApiException("Transaction not found for ID: " + id)); try { AdditionalData additionalData = additionalDataService.getAdditionalDataRepository() .findByTransactionIdAndRequestType(id.toString(), RequestType.INTEGRATION).orElseThrow(() -> new ApiException("Additional data not found for transaction ID: " + id + " and request type: " + RequestType.INTEGRATION)); transaction.setAdditionalData(Utils.fromJson(additionalData.getJsonString(), List.class)); } catch (ApiException e) { // TODO Auto-generated catch block e.printStackTrace(); } return transaction; } public Page findAll(Specification spec, Pageable pageable) { return transactionRepository.findAll(spec, pageable); } public Transaction save(Transaction transaction){ return transactionRepository.save(transaction); } }