completed poll logic

This commit is contained in:
2025-12-08 14:01:51 +02:00
parent bbc545f290
commit 97dae2e9ee
4 changed files with 14 additions and 12 deletions

View File

@@ -19,4 +19,5 @@ public interface TransactionRepository extends JpaRepository<Transaction, UUID>,
List<Transaction> findAllByUserId(String uid);
List<Transaction> findAllByConfirmationStatusAndPaymentStatusAndIntegrationStatus(
Status s1, Status s2, Status s3);
List<Transaction> findAllByConfirmationStatusAndIntegrationStatus(Status s1, Status s2);
}

View File

@@ -12,6 +12,7 @@ import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import zw.qantra.tm.domain.dtos.StateResponse;
import zw.qantra.tm.domain.enums.Status;
import zw.qantra.tm.domain.models.Transaction;
import zw.qantra.tm.domain.services.TransactionService;
@@ -19,6 +20,7 @@ import zw.qantra.tm.utils.LogUtils;
import zw.qantra.tm.utils.Utils;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@@ -45,8 +47,7 @@ public class PollCronWorkflow extends WorkflowDefinition {
public NextAction process(StateExecution execution) {
List<Transaction> transactions = transactionService.getTransactionRepository()
.findAllByConfirmationStatusAndPaymentStatusAndIntegrationStatus(
Status.SUCCESS, Status.PENDING, Status.PENDING);
.findAllByConfirmationStatusAndIntegrationStatus(Status.SUCCESS, Status.PENDING);
log.info("Transaction count {}", transactions.size());
for (Transaction transaction: transactions) {
@@ -74,15 +75,19 @@ public class PollCronWorkflow extends WorkflowDefinition {
Object response = future.get();
LogUtils.logPrettyJson(log, "polling result", response);
Transaction tran = Utils.deepCopy(response, Transaction.class);
StateResponse wfResp = Utils.deepCopy(response, StateResponse.class);
LinkedHashMap tran = (LinkedHashMap) wfResp.getBody();
if(tran == null)
break;
// only attempt integration logic if polling succeeded
if(tran.getStatus().equals(Status.SUCCESS)) {
if(tran.get("status").equals(Status.SUCCESS.name())) {
// integration logic
WorkflowInstance update1 = new WorkflowInstance.Builder()
.setId(transaction.getWorkflowId())
.setState("integration") // The state you want to transition to
.setNextActivation(DateTime.now()) // Schedule immediate execution
.setStateVariables(new HashMap<>(){{ put("body", Utils.toJson(transaction)); }})
.setStateVariables(new HashMap<>(){{ put("body", Utils.toJson(tran)); }})
.setStateText("Resumed from manual state")
.build();
@@ -107,10 +112,6 @@ public class PollCronWorkflow extends WorkflowDefinition {
}catch (Exception e) {
log.error(e.getMessage());
transaction.setPollingStatus(Status.FAILED);
transaction.setIntegrationStatus(Status.FAILED);
transactionService.save(transaction);
}
}

View File

@@ -28,8 +28,8 @@ public class StartupApplicationListener implements ApplicationListener<ContextRe
.setNextActivation(DateTime.now())
.build();
// long workflowId = workflowInstanceService.insertWorkflowInstance(instance);
long workflowId = workflowInstanceService.insertWorkflowInstance(instance);
// log.info("Cron workflow ID {} started", workflowId);
log.info("Cron workflow ID {} started", workflowId);
}
}

View File

@@ -256,7 +256,7 @@ public class TransactionWorkflow extends WorkflowDefinition {
} catch (Exception e) {
log.info(e.getMessage());
execution.setVariable("body", Utils.toJson(transaction));
return NextAction.retryAfter(DateTime.now().plusSeconds(30), e.getMessage());
return NextAction.moveToState(TRAN_FAILED, "Polling failed");
}
}