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