updates on transaction structure
This commit is contained in:
@@ -1,22 +0,0 @@
|
|||||||
package zw.qantra.tm.domain.controllers;
|
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.springframework.http.ResponseEntity;
|
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
import zw.qantra.tm.domain.models.Transaction;
|
|
||||||
import zw.qantra.tm.domain.services.TransactionService;
|
|
||||||
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/public/confirm/transaction")
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class ConfirmationController {
|
|
||||||
private final TransactionService transactionService;
|
|
||||||
|
|
||||||
@PostMapping()
|
|
||||||
public ResponseEntity post(@RequestBody Transaction transaction) {
|
|
||||||
return ResponseEntity.ok(transactionService.execute(transaction));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -69,10 +69,19 @@ public class TransactonController {
|
|||||||
return ResponseEntity.ok(transactionService.poll(id));
|
return ResponseEntity.ok(transactionService.poll(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/request")
|
||||||
|
public ResponseEntity<Transaction> request(@RequestBody Transaction transaction) {
|
||||||
|
LogUtils.logPrettyJson(logger, "incoming transaction", transaction);
|
||||||
|
Transaction createdTransaction = transactionService.request(transaction);
|
||||||
|
LogUtils.logPrettyJson(logger, "outgoing transaction", createdTransaction);
|
||||||
|
return ResponseEntity.ok(createdTransaction);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@PostMapping
|
@PostMapping
|
||||||
public ResponseEntity<Transaction> create(@RequestBody Transaction transaction) {
|
public ResponseEntity<Transaction> create(@RequestBody Transaction transaction) {
|
||||||
LogUtils.logPrettyJson(logger, "incoming transaction", transaction);
|
LogUtils.logPrettyJson(logger, "incoming transaction", transaction);
|
||||||
Transaction createdTransaction = transactionService.execute(transaction);
|
Transaction createdTransaction = transactionService.confirm(transaction);
|
||||||
LogUtils.logPrettyJson(logger, "outgoing transaction", createdTransaction);
|
LogUtils.logPrettyJson(logger, "outgoing transaction", createdTransaction);
|
||||||
return ResponseEntity.ok(createdTransaction);
|
return ResponseEntity.ok(createdTransaction);
|
||||||
}
|
}
|
||||||
@@ -83,7 +92,7 @@ public class TransactonController {
|
|||||||
return ResponseEntity.notFound().build();
|
return ResponseEntity.notFound().build();
|
||||||
}
|
}
|
||||||
transaction.setId(id);
|
transaction.setId(id);
|
||||||
return ResponseEntity.ok(transactionService.execute(transaction));
|
return ResponseEntity.ok(transactionService.getTransactionRepository().save(transaction));
|
||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/{id}")
|
@DeleteMapping("/{id}")
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package zw.qantra.tm.domain.models;
|
|||||||
|
|
||||||
import jakarta.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import jakarta.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.EnumType;
|
||||||
|
import jakarta.persistence.Enumerated;
|
||||||
import jakarta.persistence.JoinColumn;
|
import jakarta.persistence.JoinColumn;
|
||||||
import jakarta.persistence.OneToOne;
|
import jakarta.persistence.OneToOne;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
@@ -10,6 +12,7 @@ import lombok.Builder;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
import zw.qantra.tm.domain.enums.RequestType;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
@@ -24,4 +27,7 @@ public class AdditionalData extends BaseEntity {
|
|||||||
|
|
||||||
@Column(columnDefinition = "TEXT")
|
@Column(columnDefinition = "TEXT")
|
||||||
private String jsonString;
|
private String jsonString;
|
||||||
|
|
||||||
|
@Enumerated(EnumType.STRING)
|
||||||
|
private RequestType requestType;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ public class Transaction extends BaseEntity {
|
|||||||
private String productUid;
|
private String productUid;
|
||||||
private String paymentProcessorLabel;
|
private String paymentProcessorLabel;
|
||||||
private String integrationProcessorLabel;
|
private String integrationProcessorLabel;
|
||||||
|
private String confirmationProcessorLabel;
|
||||||
private String providerLabel;
|
private String providerLabel;
|
||||||
private String rrn;
|
private String rrn;
|
||||||
private String channelName;
|
private String channelName;
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ package zw.qantra.tm.domain.repositories;
|
|||||||
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import zw.qantra.tm.domain.enums.RequestType;
|
||||||
import zw.qantra.tm.domain.models.AdditionalData;
|
import zw.qantra.tm.domain.models.AdditionalData;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@@ -10,4 +12,5 @@ import java.util.UUID;
|
|||||||
@Repository
|
@Repository
|
||||||
public interface AdditionalDataRepository extends JpaRepository<AdditionalData, UUID> {
|
public interface AdditionalDataRepository extends JpaRepository<AdditionalData, UUID> {
|
||||||
Optional<AdditionalData> findByTransactionId(UUID transactionId);
|
Optional<AdditionalData> findByTransactionId(UUID transactionId);
|
||||||
|
Optional<AdditionalData> findByTransactionIdAndRequestType(UUID transactionId, RequestType requestType);
|
||||||
}
|
}
|
||||||
@@ -6,5 +6,5 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
|||||||
import zw.qantra.tm.domain.models.TransactionEvent;
|
import zw.qantra.tm.domain.models.TransactionEvent;
|
||||||
|
|
||||||
public interface TransactionEventRepository extends JpaRepository<TransactionEvent, UUID> {
|
public interface TransactionEventRepository extends JpaRepository<TransactionEvent, UUID> {
|
||||||
List<TransactionEvent> findByTransactionId(UUID transactionId);
|
List<TransactionEvent> findByTransactionId(String transactionId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package zw.qantra.tm.domain.services;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@@ -23,6 +22,7 @@ import zw.qantra.tm.domain.repositories.TransactionRepository;
|
|||||||
import zw.qantra.tm.domain.services.factories.PaymentProcessorFactory;
|
import zw.qantra.tm.domain.services.factories.PaymentProcessorFactory;
|
||||||
import zw.qantra.tm.domain.services.processors.TransactionProcessorInterface;
|
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.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.ConfirmationLogicHandler;
|
||||||
import zw.qantra.tm.domain.services.processors.handlers.FormattingHandler;
|
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.LogicPipeline;
|
||||||
@@ -31,7 +31,6 @@ import zw.qantra.tm.domain.services.processors.handlers.ValidationHandler;
|
|||||||
import zw.qantra.tm.domain.services.processors.handlers.erp.PurchaseInvoiceHandler;
|
import zw.qantra.tm.domain.services.processors.handlers.erp.PurchaseInvoiceHandler;
|
||||||
import zw.qantra.tm.domain.services.processors.handlers.erp.SalesInvoiceHandler;
|
import zw.qantra.tm.domain.services.processors.handlers.erp.SalesInvoiceHandler;
|
||||||
import zw.qantra.tm.domain.models.TransactionEvent;
|
import zw.qantra.tm.domain.models.TransactionEvent;
|
||||||
import zw.qantra.tm.domain.services.TransactionEventService;
|
|
||||||
import zw.qantra.tm.exceptions.ApiException;
|
import zw.qantra.tm.exceptions.ApiException;
|
||||||
import zw.qantra.tm.utils.Utils;
|
import zw.qantra.tm.utils.Utils;
|
||||||
|
|
||||||
@@ -78,6 +77,8 @@ public class TransactionService {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
transactionProcessorInterface.process(transaction);
|
transactionProcessorInterface.process(transaction);
|
||||||
|
transaction.setIntegrationStatus(transaction.getStatus());
|
||||||
|
transactionRepository.save(transaction);
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
transaction.setStatus(Status.FAILED);
|
transaction.setStatus(Status.FAILED);
|
||||||
@@ -106,7 +107,7 @@ public class TransactionService {
|
|||||||
|
|
||||||
Transaction transaction = transactionRepository.findById(uuid).get();
|
Transaction transaction = transactionRepository.findById(uuid).get();
|
||||||
// if the transaction is already successful, return it
|
// if the transaction is already successful, return it
|
||||||
if(transaction.getStatus() == Status.SUCCESS){
|
if(transaction.getIntegrationStatus() == Status.SUCCESS){
|
||||||
return transaction;
|
return transaction;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -118,7 +119,7 @@ public class TransactionService {
|
|||||||
transactionEventService.save(transactionEvent);
|
transactionEventService.save(transactionEvent);
|
||||||
|
|
||||||
// no persistence happens during polling unless the transaction status changes
|
// no persistence happens during polling unless the transaction status changes
|
||||||
String label = getLabel(transaction);
|
String label = "REQUEST_" + transaction.getPaymentProcessorLabel() + "_" + transaction.getAuthType();
|
||||||
logger.info("label: {}", label);
|
logger.info("label: {}", label);
|
||||||
|
|
||||||
TransactionProcessorInterface transactionProcessorInterface =
|
TransactionProcessorInterface transactionProcessorInterface =
|
||||||
@@ -131,6 +132,9 @@ public class TransactionService {
|
|||||||
transactionEvent.setMessage(transaction.getErrorMessage());
|
transactionEvent.setMessage(transaction.getErrorMessage());
|
||||||
transactionEventService.save(transactionEvent);
|
transactionEventService.save(transactionEvent);
|
||||||
|
|
||||||
|
transaction.setPollingStatus(transaction.getStatus());
|
||||||
|
transactionRepository.save(transaction);
|
||||||
|
|
||||||
// if tran was successful push integration to the aggregator
|
// if tran was successful push integration to the aggregator
|
||||||
if(transaction.getStatus() == Status.SUCCESS){
|
if(transaction.getStatus() == Status.SUCCESS){
|
||||||
transaction.setType(RequestType.INTEGRATION);
|
transaction.setType(RequestType.INTEGRATION);
|
||||||
@@ -146,15 +150,25 @@ public class TransactionService {
|
|||||||
return transaction;
|
return transaction;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Transaction execute(Transaction incomingTransaction) {
|
public Transaction request(Transaction incomingTransaction) {
|
||||||
// if payment request (not confirm), then fetch already existing transaction record
|
// if payment request (not confirm), then fetch already existing transaction record
|
||||||
Transaction transaction = incomingTransaction;
|
Transaction transaction = incomingTransaction;
|
||||||
if(incomingTransaction.getId() != null){
|
if(incomingTransaction.getId() != null){
|
||||||
transaction = getTransactionRepository().findById(incomingTransaction.getId()).orElseThrow(() ->
|
transaction = getTransactionRepository().findById(incomingTransaction.getId()).orElseThrow(() ->
|
||||||
new ApiException("Transaction not found for ID: " + incomingTransaction.getId()));
|
new ApiException("Transaction not found for ID: " + incomingTransaction.getId()));
|
||||||
transaction.setType(incomingTransaction.getType()); // type should be REQUEST here
|
transaction.setType(incomingTransaction.getType()); // type should be REQUEST here
|
||||||
|
transaction.setAuthType(incomingTransaction.getAuthType());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// run pre transaction logic
|
||||||
|
LogicPipeline<Transaction, Transaction> preTransactionLogic =
|
||||||
|
new LogicPipeline<>(new CalculateChargesHandler(chargeService))
|
||||||
|
.addHandler(new FormattingHandler())
|
||||||
|
.addHandler(new ValidationHandler());
|
||||||
|
transaction = preTransactionLogic.execute(transaction);
|
||||||
|
|
||||||
|
transactionRepository.save(transaction);
|
||||||
|
|
||||||
TransactionEvent transactionEvent = TransactionEvent.builder()
|
TransactionEvent transactionEvent = TransactionEvent.builder()
|
||||||
.transactionId(transaction.getId().toString())
|
.transactionId(transaction.getId().toString())
|
||||||
.event(transaction.getType().name())
|
.event(transaction.getType().name())
|
||||||
@@ -162,15 +176,7 @@ public class TransactionService {
|
|||||||
.build();
|
.build();
|
||||||
transactionEventService.save(transactionEvent);
|
transactionEventService.save(transactionEvent);
|
||||||
|
|
||||||
// run pre transaction logic
|
String label = transaction.getType() + "_" + transaction.getPaymentProcessorLabel() + "_" + transaction.getAuthType();
|
||||||
LogicPipeline<Transaction, Transaction> preTransactionLogic =
|
|
||||||
new LogicPipeline<>(new CalculateChargesHandler(chargeService))
|
|
||||||
.addHandler(new ConfirmationLogicHandler())
|
|
||||||
.addHandler(new FormattingHandler())
|
|
||||||
.addHandler(new ValidationHandler());
|
|
||||||
transaction = preTransactionLogic.execute(transaction);
|
|
||||||
|
|
||||||
String label = getLabel(transaction);
|
|
||||||
logger.info("label: {}", label);
|
logger.info("label: {}", label);
|
||||||
|
|
||||||
TransactionProcessorInterface transactionProcessorInterface =
|
TransactionProcessorInterface transactionProcessorInterface =
|
||||||
@@ -179,12 +185,7 @@ public class TransactionService {
|
|||||||
try {
|
try {
|
||||||
// MAIN TRANSACTION LOGIC!
|
// MAIN TRANSACTION LOGIC!
|
||||||
transactionProcessorInterface.process(transaction);
|
transactionProcessorInterface.process(transaction);
|
||||||
|
|
||||||
if(transaction.getType() == RequestType.CONFIRM){
|
|
||||||
transaction.setConfirmationStatus(transaction.getStatus());
|
|
||||||
}else{
|
|
||||||
transaction.setPaymentStatus(transaction.getStatus());
|
transaction.setPaymentStatus(transaction.getStatus());
|
||||||
}
|
|
||||||
|
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -208,25 +209,52 @@ public class TransactionService {
|
|||||||
return transaction;
|
return transaction;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getLabel(Transaction transaction){
|
public Transaction confirm(Transaction transaction) {
|
||||||
String label = "";
|
// run pre transaction logic
|
||||||
if(transaction.getType() == RequestType.CONFIRM){
|
LogicPipeline<Transaction, Transaction> preTransactionLogic =
|
||||||
// get processor label from billClientId
|
new LogicPipeline<>(new CalculateChargesHandler(chargeService))
|
||||||
Provider provider = providerService.getProviderRepository()
|
.addHandler(new ConfirmationLabelHandler(providerService))
|
||||||
.findByClientId(transaction.getBillClientId());
|
.addHandler(new ConfirmationLogicHandler())
|
||||||
if(provider == null){
|
.addHandler(new FormattingHandler())
|
||||||
throw new ApiException("Provider not found for billClientId: " + transaction.getBillClientId());
|
.addHandler(new ValidationHandler());
|
||||||
}
|
transaction = preTransactionLogic.execute(transaction);
|
||||||
label = transaction.getType() + "_" +
|
transactionRepository.save(transaction);
|
||||||
provider.getLabel();
|
|
||||||
|
|
||||||
transaction.setIntegrationProcessorLabel(provider.getIntegrationProcessorLabel());
|
TransactionEvent transactionEvent = TransactionEvent.builder()
|
||||||
}else{
|
.transactionId(transaction.getId().toString())
|
||||||
label = transaction.getType() + "_" +
|
.event(transaction.getType().name())
|
||||||
transaction.getPaymentProcessorLabel() + "_" +
|
.status(Status.PROCESSING)
|
||||||
transaction.getAuthType();
|
.build();
|
||||||
|
transactionEventService.save(transactionEvent);
|
||||||
|
|
||||||
|
TransactionProcessorInterface transactionProcessorInterface =
|
||||||
|
(TransactionProcessorInterface) paymentProcessorFactory.getPaymentProcessor(
|
||||||
|
transaction.getConfirmationProcessorLabel());
|
||||||
|
|
||||||
|
try {
|
||||||
|
// MAIN TRANSACTION LOGIC!
|
||||||
|
transactionProcessorInterface.process(transaction);
|
||||||
|
transaction.setConfirmationStatus(transaction.getStatus());
|
||||||
|
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
transaction.setStatus(Status.FAILED);
|
||||||
|
transaction.setResponseCode("01");
|
||||||
|
transaction.setErrorMessage(e.getMessage());
|
||||||
|
transactionRepository.save(transaction);
|
||||||
|
return transaction;
|
||||||
}
|
}
|
||||||
return label;
|
|
||||||
|
// run post transaction logic
|
||||||
|
LogicPipeline<Transaction, Transaction> postTransactionLogic =
|
||||||
|
new LogicPipeline<>(new RecipientsUpdateHandler(recipientService));
|
||||||
|
transaction = postTransactionLogic.execute(transaction);
|
||||||
|
|
||||||
|
transactionEvent.setStatus(transaction.getStatus());
|
||||||
|
transactionEvent.setMessage(transaction.getErrorMessage());
|
||||||
|
transactionEventService.save(transactionEvent);
|
||||||
|
|
||||||
|
return transaction;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Transaction findById(UUID id) {
|
public Transaction findById(UUID id) {
|
||||||
@@ -234,7 +262,8 @@ public class TransactionService {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
AdditionalData additionalData = additionalDataService.getAdditionalDataRepository()
|
AdditionalData additionalData = additionalDataService.getAdditionalDataRepository()
|
||||||
.findByTransactionId(id).orElseThrow(() -> new ApiException("Additional data not found for transaction ID: " + id));
|
.findByTransactionIdAndRequestType(id, 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));
|
transaction.setAdditionalData(Utils.fromJson(additionalData.getJsonString(), List.class));
|
||||||
} catch (ApiException e) {
|
} catch (ApiException e) {
|
||||||
// TODO Auto-generated catch block
|
// TODO Auto-generated catch block
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ public class EconetConfirmationProcessor implements TransactionProcessorInterfac
|
|||||||
|
|
||||||
AdditionalData additionalData = AdditionalData.builder()
|
AdditionalData additionalData = AdditionalData.builder()
|
||||||
.transaction(transaction)
|
.transaction(transaction)
|
||||||
|
.requestType(RequestType.CONFIRM)
|
||||||
.jsonString(Utils.toJson(body.get("additionalData")))
|
.jsonString(Utils.toJson(body.get("additionalData")))
|
||||||
.build();
|
.build();
|
||||||
additionalDataService.getAdditionalDataRepository().save(additionalData);
|
additionalDataService.getAdditionalDataRepository().save(additionalData);
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ public class ZesaConfirmationProcessor implements TransactionProcessorInterface
|
|||||||
|
|
||||||
AdditionalData additionalData = AdditionalData.builder()
|
AdditionalData additionalData = AdditionalData.builder()
|
||||||
.transaction(transaction)
|
.transaction(transaction)
|
||||||
|
.requestType(RequestType.CONFIRM)
|
||||||
.jsonString(Utils.toJson(body.get("additionalData")))
|
.jsonString(Utils.toJson(body.get("additionalData")))
|
||||||
.build();
|
.build();
|
||||||
additionalDataService.getAdditionalDataRepository().save(additionalData);
|
additionalDataService.getAdditionalDataRepository().save(additionalData);
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package zw.qantra.tm.domain.services.processors.handlers;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import zw.qantra.tm.domain.models.Provider;
|
||||||
|
import zw.qantra.tm.domain.models.Transaction;
|
||||||
|
import zw.qantra.tm.domain.services.ProviderService;
|
||||||
|
import zw.qantra.tm.exceptions.ApiException;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class ConfirmationLabelHandler implements LogicHandler<Transaction, Transaction> {
|
||||||
|
private final Logger logger = LoggerFactory.getLogger(ConfirmationLabelHandler.class);
|
||||||
|
|
||||||
|
private final ProviderService providerService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Transaction process(Transaction transaction) {
|
||||||
|
Provider provider = providerService.getProviderRepository()
|
||||||
|
.findByClientId(transaction.getBillClientId());
|
||||||
|
if(provider == null){
|
||||||
|
throw new ApiException("Provider not found for billClientId: " + transaction.getBillClientId());
|
||||||
|
}
|
||||||
|
String label = transaction.getType() + "_" + provider.getLabel();
|
||||||
|
|
||||||
|
transaction.setConfirmationProcessorLabel(label);
|
||||||
|
logger.info("label: {}", label);
|
||||||
|
return transaction;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,7 +6,6 @@ import org.slf4j.LoggerFactory;
|
|||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import jakarta.transaction.TransactionScoped;
|
|
||||||
import jakarta.transaction.Transactional;
|
import jakarta.transaction.Transactional;
|
||||||
import zw.qantra.tm.domain.dtos.BillPaymentDto;
|
import zw.qantra.tm.domain.dtos.BillPaymentDto;
|
||||||
import zw.qantra.tm.domain.enums.RequestType;
|
import zw.qantra.tm.domain.enums.RequestType;
|
||||||
@@ -19,7 +18,6 @@ import zw.qantra.tm.domain.services.processors.TransactionProcessorInterface;
|
|||||||
import zw.qantra.tm.rest.RestService;
|
import zw.qantra.tm.rest.RestService;
|
||||||
import zw.qantra.tm.utils.Utils;
|
import zw.qantra.tm.utils.Utils;
|
||||||
|
|
||||||
import java.beans.Transient;
|
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
|
|
||||||
@Service("INTEGRATION_STEWARD")
|
@Service("INTEGRATION_STEWARD")
|
||||||
@@ -45,10 +43,15 @@ public class StewardIntegrationProcessor implements TransactionProcessorInterfac
|
|||||||
logger.info("processing integration");
|
logger.info("processing integration");
|
||||||
String token = restService.getMerchantToken();
|
String token = restService.getMerchantToken();
|
||||||
|
|
||||||
|
String debitRef = transaction.getDebitRef();
|
||||||
|
if(debitRef == null || debitRef.isEmpty()){
|
||||||
|
debitRef = Utils.getUid();
|
||||||
|
}
|
||||||
|
|
||||||
BillPaymentDto request = BillPaymentDto.builder()
|
BillPaymentDto request = BillPaymentDto.builder()
|
||||||
.type(RequestType.REQUEST)
|
.type(RequestType.REQUEST)
|
||||||
.billClientId(transaction.getBillClientId())
|
.billClientId(transaction.getBillClientId())
|
||||||
.debitRef(transaction.getDebitRef())
|
.debitRef(debitRef)
|
||||||
.debitCurrency(transaction.getDebitCurrency())
|
.debitCurrency(transaction.getDebitCurrency())
|
||||||
.amount(transaction.getAmount())
|
.amount(transaction.getAmount())
|
||||||
.aggregatorId(aggregatorClientId)
|
.aggregatorId(aggregatorClientId)
|
||||||
@@ -77,25 +80,12 @@ public class StewardIntegrationProcessor implements TransactionProcessorInterfac
|
|||||||
transaction.setErrorMessage(null); // clear any previous error message
|
transaction.setErrorMessage(null); // clear any previous error message
|
||||||
transactionService.save(transaction);
|
transactionService.save(transaction);
|
||||||
|
|
||||||
AdditionalData additionalData = additionalDataService.getAdditionalDataRepository()
|
AdditionalData additionalData = new AdditionalData();
|
||||||
.findByTransactionId(transaction.getId()).orElse(new AdditionalData());
|
|
||||||
|
|
||||||
additionalData.setTransaction(transaction);
|
additionalData.setTransaction(transaction);
|
||||||
|
additionalData.setRequestType(RequestType.INTEGRATION);
|
||||||
additionalData.setJsonString(Utils.toJson(body.get("additionalData")));
|
additionalData.setJsonString(Utils.toJson(body.get("additionalData")));
|
||||||
additionalDataService.getAdditionalDataRepository().save(additionalData);
|
additionalDataService.getAdditionalDataRepository().save(additionalData);
|
||||||
|
|
||||||
// fetch the corresponding request transaction if it exists
|
|
||||||
Transaction requestTransaction = transactionService.getTransactionRepository()
|
|
||||||
.findByTraceAndType(transaction.getTrace(), RequestType.REQUEST);
|
|
||||||
if (requestTransaction != null) {
|
|
||||||
// create a new additional data for the request transaction
|
|
||||||
AdditionalData requestAdditionalData = additionalDataService.getAdditionalDataRepository()
|
|
||||||
.findByTransactionId(requestTransaction.getId()).orElse(new AdditionalData());
|
|
||||||
requestAdditionalData.setTransaction(requestTransaction);
|
|
||||||
requestAdditionalData.setJsonString(Utils.toJson(body.get("additionalData")));
|
|
||||||
additionalDataService.getAdditionalDataRepository().save(requestAdditionalData);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
transaction.setStatus(Status.FAILED);
|
transaction.setStatus(Status.FAILED);
|
||||||
transaction.setResponseCode((String) body.get("responseCode"));
|
transaction.setResponseCode((String) body.get("responseCode"));
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ public class MPGSWebPaymentProcessor implements TransactionProcessorInterface {
|
|||||||
transaction.setTargetUrl((String) body.get("targetUrl"));
|
transaction.setTargetUrl((String) body.get("targetUrl"));
|
||||||
|
|
||||||
LinkedHashMap transactionData = (LinkedHashMap) body.get("transaction");
|
LinkedHashMap transactionData = (LinkedHashMap) body.get("transaction");
|
||||||
transaction.setDebitRef((String) transactionData.get("debitReference"));
|
transaction.setDebitRef((String) transactionData.get("creditReference"));
|
||||||
|
|
||||||
transactionService.save(transaction);
|
transactionService.save(transaction);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user